diff options
author | Guido van Rossum <guido@python.org> | 2023-08-26 23:22:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-26 23:22:40 (GMT) |
commit | bbdd8895a5aced4cd4e66a5c6e3471636f28df6b (patch) | |
tree | c0c172d6ce0fe61d0272f853c8b1764d0f8437b3 /Python/generated_cases.c.h | |
parent | 208741cc3098c905914ecdc1110bfd805d4bb874 (diff) | |
download | cpython-bbdd8895a5aced4cd4e66a5c6e3471636f28df6b.zip cpython-bbdd8895a5aced4cd4e66a5c6e3471636f28df6b.tar.gz cpython-bbdd8895a5aced4cd4e66a5c6e3471636f28df6b.tar.bz2 |
[3.12] gh-108487: Change assert that should've been DEOPT_IF (#108509)
* Remove assert that should've been DEOPT_IF
The assert(method != NULL) in CALL_NO_KW_LIST_APPEND is wrong --
this condition should lead to a deoptimization, and indeed there
is a DEOPT_IF two lines later that will trigger if method == NULL.
This would crash in a devious repro scenario (first seen live
in boto3 tests) when compiled with assertions enabled.
In a production version there is no crash, so impact is limited.
(The crash also appears in main; I will prepare a separate PR.)
* Add back a different assert(self != NULL)
* 📜🤖 Added by blurb_it.
---------
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Diffstat (limited to 'Python/generated_cases.c.h')
-rw-r--r-- | Python/generated_cases.c.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index b0a363c..a3c0495 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -4248,9 +4248,9 @@ #line 2993 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); - assert(method != NULL); PyInterpreterState *interp = _PyInterpreterState_GET(); DEOPT_IF(method != interp->callable_cache.list_append, CALL); + assert(self != NULL); DEOPT_IF(!PyList_Check(self), CALL); STAT_INC(CALL, hit); if (_PyList_AppendTakeRef((PyListObject *)self, args[0]) < 0) { |