[Python-checkins] GH-94893: Ignore caches when adding LOAD_FAST_CHECKs (GH-94894)
brandtbucher
webhook-mailer at python.org
Mon Jul 18 12:00:57 EDT 2022
https://github.com/python/cpython/commit/b407312a24f12de76a928394099decd64f6049a6
commit: b407312a24f12de76a928394099decd64f6049a6
branch: main
author: Brandt Bucher <brandtbucher at microsoft.com>
committer: brandtbucher <brandtbucher at gmail.com>
date: 2022-07-18T09:00:41-07:00
summary:
GH-94893: Ignore caches when adding LOAD_FAST_CHECKs (GH-94894)
files:
A Misc/NEWS.d/next/Core and Builtins/2022-07-15-22-47-44.gh-issue-94893.YiJYcW.rst
M Objects/frameobject.c
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-07-15-22-47-44.gh-issue-94893.YiJYcW.rst b/Misc/NEWS.d/next/Core and Builtins/2022-07-15-22-47-44.gh-issue-94893.YiJYcW.rst
new file mode 100644
index 0000000000000..6384ef92c6543
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-07-15-22-47-44.gh-issue-94893.YiJYcW.rst
@@ -0,0 +1,2 @@
+Fix an issue where frame object manipulations could corrupt inline bytecode
+caches.
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 3e97b75d4bf5a..fe8eaa341fb33 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -603,7 +603,8 @@ add_load_fast_null_checks(PyCodeObject *co)
int changed = 0;
_Py_CODEUNIT *instructions = _PyCode_CODE(co);
for (Py_ssize_t i = 0; i < Py_SIZE(co); i++) {
- switch (_Py_OPCODE(instructions[i])) {
+ int opcode = _Py_OPCODE(instructions[i]);
+ switch (opcode) {
case LOAD_FAST:
case LOAD_FAST__LOAD_FAST:
case LOAD_FAST__LOAD_CONST:
@@ -619,6 +620,7 @@ add_load_fast_null_checks(PyCodeObject *co)
_Py_SET_OPCODE(instructions[i], STORE_FAST);
break;
}
+ i += _PyOpcode_Caches[_PyOpcode_Deopt[opcode]];
}
if (changed) {
// invalidate cached co_code object
More information about the Python-checkins
mailing list