Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-07-07 05:30:40 +0300
committerCampbell Barton <campbell@blender.org>2022-07-07 05:30:40 +0300
commit378f65f7d9843ea789a66623019163f935af141e (patch)
tree6862ca2d9b1b5ae78939dda59c2e9db9cb3167eb /source/blender/python
parent3354ec3fb3f6c0785c7c1ad9d84bae1c58d1628f (diff)
Fix Py-driver byte code access with Python 3.11
Error in [0] which assumed the struct member was renamed however byte-code access from PyCodeObject now requires an API call. Thanks to @music for pointing this out. [0]: 780c0ea097444c3be60314dffd203c099720badb
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/intern/bpy_driver.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/source/blender/python/intern/bpy_driver.c b/source/blender/python/intern/bpy_driver.c
index f71cf164e8c..07de5877d42 100644
--- a/source/blender/python/intern/bpy_driver.c
+++ b/source/blender/python/intern/bpy_driver.c
@@ -443,13 +443,19 @@ static bool bpy_driver_secure_bytecode_validate(PyObject *expr_code, PyObject *d
PyObject *co_code;
# if PY_VERSION_HEX >= 0x030b0000 /* Python 3.11 & newer. */
- co_code = py_code->_co_code;
+ co_code = PyCode_GetCode(py_code);
+ if (UNLIKELY(!co_code)) {
+ PyErr_Print();
+ PyErr_Clear();
+ return false;
+ }
# else
co_code = py_code->co_code;
# endif
PyBytes_AsStringAndSize(co_code, (char **)&codestr, &code_len);
code_len /= sizeof(*codestr);
+ bool ok = true;
for (Py_ssize_t i = 0; i < code_len; i++) {
const int opcode = _Py_OPCODE(codestr[i]);
@@ -458,11 +464,17 @@ static bool bpy_driver_secure_bytecode_validate(PyObject *expr_code, PyObject *d
"\tBPY_driver_eval() - restricted access disallows opcode '%d', "
"enable auto-execution to support\n",
opcode);
- return false;
+ ok = false;
+ break;
}
}
-# undef CODESIZE
+# if PY_VERSION_HEX >= 0x030b0000 /* Python 3.11 & newer. */
+ Py_DECREF(co_code);
+# endif
+ if (!ok) {
+ return false;
+ }
}
return true;