diff options
author | Ammar Askar <ammar@ammaraskar.com> | 2020-06-10 23:31:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-10 23:31:22 (GMT) |
commit | 3b3b83c965447a8329b34cb4befe6e9908880ee5 (patch) | |
tree | 612bf0d51451cc7fefd97c5a45549641e93a86ea /Objects/codeobject.c | |
parent | 1642c0ef750f96664a98cadb09301d492098d2fb (diff) | |
download | cpython-3b3b83c965447a8329b34cb4befe6e9908880ee5.zip cpython-3b3b83c965447a8329b34cb4befe6e9908880ee5.tar.gz cpython-3b3b83c965447a8329b34cb4befe6e9908880ee5.tar.bz2 |
Restrict co_code to be under INT_MAX in codeobject (GH-20628)
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r-- | Objects/codeobject.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 7376359..cb4fb68 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -166,6 +166,14 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, return NULL; } + /* Make sure that code is indexable with an int, this is + a long running assumption in ceval.c and many parts of + the interpreter. */ + if (PyBytes_GET_SIZE(code) > INT_MAX) { + PyErr_SetString(PyExc_OverflowError, "co_code larger than INT_MAX"); + return NULL; + } + /* Check for any inner or outer closure references */ n_cellvars = PyTuple_GET_SIZE(cellvars); if (!n_cellvars && !PyTuple_GET_SIZE(freevars)) { |