Skip to content

Commit

Permalink
IEEE 802.15.4: Fix an undefined behavior at runtime
Browse files Browse the repository at this point in the history
The error was:
print-802_15_4.c:442:9: runtime error: implicit conversion from type
'int' of value 15840046 (32-bit, signed) to type 'uint16_t' (aka
'unsigned short') changed the value to 45870 (16-bit, unsigned)

Proposal of fix by Guy Harris:
"Those shifted values will be converted (in the C abstract machine) to
int, but they'll all be in the range 0 to 65535, as will be the XOR of
all 4 of them; converting that to a uint16_t isn't undefined behavior."
  • Loading branch information
fxlb committed Mar 28, 2019
1 parent f280b3c commit 4006431
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions print-802_15_4.c
Original file line number Diff line number Diff line change
Expand Up @@ -439,10 +439,10 @@ ieee802_15_4_crc16(const u_char *p,
/* Update CRC */
x = crc >> 8 ^ y;
x ^= x >> 4;
crc = (crc << 8) ^
((unsigned short)(x << 12)) ^
((unsigned short)(x <<5)) ^
((unsigned short)x);
crc = ((uint16_t)(crc << 8)) ^
((uint16_t)(x << 12)) ^
((uint16_t)(x << 5)) ^
((uint16_t)x);
data_len--;
}
/* Reverse bits on output */
Expand Down

0 comments on commit 4006431

Please sign in to comment.