summaryrefslogtreecommitdiffstats
path: root/Objects/codeobject.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2021-08-16 18:34:23 (GMT)
committerGitHub <noreply@github.com>2021-08-16 18:34:23 (GMT)
commit62bd97303eb6d1fb0109e4a57d38c2ba6b0be7ff (patch)
tree63ac3d6fbe5a343b65d538b86ddd7f2566ab348e /Objects/codeobject.c
parenta0a6d39295a30434b088f4b66439bf5ea21a3e4e (diff)
downloadcpython-62bd97303eb6d1fb0109e4a57d38c2ba6b0be7ff.zip
cpython-62bd97303eb6d1fb0109e4a57d38c2ba6b0be7ff.tar.gz
cpython-62bd97303eb6d1fb0109e4a57d38c2ba6b0be7ff.tar.bz2
Fix a SystemError in code.replace() (#27771)
While the comment said 'We don't bother resizing localspluskinds', this would cause .replace() to crash when it happened. (Also types.CodeType(), but testing that is tedious, and this tests all code paths.)
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r--Objects/codeobject.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 3dc9fd7..ad8f13a 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -471,9 +471,11 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount,
localsplusnames, localspluskinds);
}
// If any cells were args then nlocalsplus will have shrunk.
- // We don't bother resizing localspluskinds.
- if (_PyTuple_Resize(&localsplusnames, nlocalsplus) < 0) {
- goto error;
+ if (nlocalsplus != PyTuple_GET_SIZE(localsplusnames)) {
+ if (_PyTuple_Resize(&localsplusnames, nlocalsplus) < 0
+ || _PyBytes_Resize(&localspluskinds, nlocalsplus) < 0) {
+ goto error;
+ }
}
struct _PyCodeConstructor con = {