mp_bytecode_print_str: avoid undefined behavior

Left shift of negative numbers is undefined in the "C" standard.  Multiplying
by 128 has the intended effect (in the absence of integer overflow, anyway),
can be implemented using the same shift instruction, but does not invoke
undefined behavior.

This problem was found using clang 7's scan-build static analyzer.
This commit is contained in:
Jeff Epler 2019-10-08 10:48:25 +09:00
parent 46b6870ffa
commit 85f0048d22

View File

@ -185,7 +185,7 @@ const byte *mp_bytecode_print_str(const byte *ip) {
num--;
}
do {
num = (num << 7) | (*ip & 0x7f);
num = (num * 128) | (*ip & 0x7f);
} while ((*ip++ & 0x80) != 0);
printf("LOAD_CONST_SMALL_INT " INT_FMT, num);
break;