mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-08-15 13:20:10 +03:00
firmware: sniffer: fix ~INS procedure byte comparison
(~g_tpdu.packet[1]) == byte can never be true. Unary ~ applies the integer promotions first, so for tpdu INS = 0xA4 lhs should be 0x5B but as int it gets zero extended to at least 16 bits and then flipped, so it is 0xFFFFFF5B = -165, byte promotes to 0..255. The ack was therefore dead code -> fallthrough to SW1 branch, fails 0x6x/0x9x test, TPDU gets flagged SNIFF_DATA_FLAG_ERROR_MALFORMED from what I can tell. But I am losing track of all these arcane issues to be honest. Narrow the complement back to 8 bits. Fyi this is unrelated to signedness and not specific to ARM. Change-Id: I800f50ef35356429d07aa685ea919e70ec34946e
This commit is contained in:
@@ -775,7 +775,7 @@ static void process_byte_tpdu(uint8_t byte)
|
||||
} else if (g_tpdu.packet[1] == byte) { /* get all remaining data bytes */
|
||||
change_tpdu_state(TPDU_S_DATA_REMAINING);
|
||||
break;
|
||||
} else if ((~g_tpdu.packet[1]) == byte) { /* get single data byte */
|
||||
} else if ((uint8_t)(~g_tpdu.packet[1]) == byte) { /* get single data byte */
|
||||
change_tpdu_state(TPDU_S_DATA_SINGLE);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user