fix: shifting signed 32-bit value by 31 bits is undefined behaviour

This commit is contained in:
Philippe Teuwen
2019-03-12 23:59:43 +01:00
parent 4aeff95259
commit d9308d912d
4 changed files with 7 additions and 7 deletions

View File

@@ -1882,7 +1882,7 @@ int CmdT55xxRecoverPW(const char *Cmd) {
// first try fliping each bit in the expected password
while (bit < 32) {
curr_password = orig_password ^ (1 << bit);
curr_password = orig_password ^ (1u << bit);
found = tryOnePassword(curr_password);
if (found == -1) return 0;
bit++;
@@ -1897,7 +1897,7 @@ int CmdT55xxRecoverPW(const char *Cmd) {
// from low bit to high bit
bit = 0;
while (bit < 32) {
mask += (1 << bit);
mask += (1u << bit);
curr_password = orig_password & mask;
// if updated mask didn't change the password, don't try it again
if (prev_password == curr_password) {
@@ -1916,7 +1916,7 @@ int CmdT55xxRecoverPW(const char *Cmd) {
bit = 0;
mask = 0xffffffff;
while (bit < 32) {
mask -= (1 << bit);
mask -= (1u << bit);
curr_password = orig_password & mask;
// if updated mask didn't change the password, don't try it again
if (prev_password == curr_password) {

View File

@@ -191,7 +191,7 @@ int CmdTIDemod(const char *Cmd) {
bits[i] = '1';
maxPos += highLen;
// bitstream arrives lsb first so shift right
shift3 |= (1 << 31);
shift3 |= (1u << 31);
} else {
bits[i] = '.';
maxPos += lowLen;