|
18 | 18 | || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) |
19 | 19 | #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP) |
20 | 20 | #define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3)) |
21 | | -#define SETARG(arr, i, val) arr[i+2] = val>>8; arr[i+1] = val & 255 |
| 21 | +#define SETARG(arr, i, val) do { \ |
| 22 | + assert(0 <= val && val <= 0xffff); \ |
| 23 | + arr[i+2] = (unsigned char)(((unsigned int)val)>>8); \ |
| 24 | + arr[i+1] = (unsigned char)(((unsigned int)val) & 255); \ |
| 25 | +} while(0) |
22 | 26 | #define CODESIZE(op) (HAS_ARG(op) ? 3 : 1) |
23 | 27 | #define ISBASICBLOCK(blocks, start, bytes) \ |
24 | 28 | (blocks[start]==blocks[start+bytes-1]) |
@@ -355,7 +359,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, |
355 | 359 | unsigned char *codestr = NULL; |
356 | 360 | unsigned char *lineno; |
357 | 361 | int *addrmap = NULL; |
358 | | - int new_line, cum_orig_line, last_line, tabsiz; |
| 362 | + int new_line, cum_orig_line, last_line; |
| 363 | + Py_ssize_t tabsiz; |
359 | 364 | PyObject **const_stack = NULL; |
360 | 365 | Py_ssize_t *load_const_stack = NULL; |
361 | 366 | Py_ssize_t const_stack_top = -1; |
@@ -660,7 +665,8 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, |
660 | 665 |
|
661 | 666 | /* Fixup linenotab */ |
662 | 667 | for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) { |
663 | | - addrmap[i] = i - nops; |
| 668 | + assert(i - nops <= INT_MAX); |
| 669 | + addrmap[i] = (int)(i - nops); |
664 | 670 | if (codestr[i] == NOP) |
665 | 671 | nops++; |
666 | 672 | } |
|
0 commit comments