diff options
author | Campbell Barton <campbell@blender.org> | 2022-04-20 06:01:14 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-04-20 06:01:14 +0300 |
commit | feea852b10eaec8913d789e5b2609b77c281b673 (patch) | |
tree | ee01cb1cc0153a951aeb12732f9f9a7a97b35bd3 /source/blender/python | |
parent | 9364e17936969ad147198ee1bb54eb4dae5e8dab (diff) |
Fix crash passing no arguments to Context.temp_override
Diffstat (limited to 'source/blender/python')
-rw-r--r-- | source/blender/python/intern/bpy_rna_context.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/source/blender/python/intern/bpy_rna_context.c b/source/blender/python/intern/bpy_rna_context.c index 085a8323cc1..811552ce938 100644 --- a/source/blender/python/intern/bpy_rna_context.c +++ b/source/blender/python/intern/bpy_rna_context.c @@ -208,10 +208,17 @@ static PyObject *bpy_context_temp_override(PyObject *self, PyObject *args, PyObj if (context_ptr == NULL) { return NULL; } - /* Needed because the keywords copied into `kwds_parse` could contain anything. - * As the types of keys aren't checked. */ - if (!PyArg_ValidateKeywordArguments(kwds)) { - return NULL; + + if (kwds == NULL) { + /* While this is effectively NOP, support having no keywords as it's more involved + * to return an alternative (dummy) context manager. */ + } + else { + /* Needed because the keywords copied into `kwds_parse` could contain anything. + * As the types of keys aren't checked. */ + if (!PyArg_ValidateKeywordArguments(kwds)) { + return NULL; + } } struct { @@ -235,7 +242,7 @@ static PyObject *bpy_context_temp_override(PyObject *self, PyObject *args, PyObj 0, }; /* Parse known keywords, the remaining keywords are set using #CTX_py_state_push. */ - kwds = PyDict_Copy(kwds); + kwds = kwds ? PyDict_Copy(kwds) : PyDict_New(); { PyObject *kwds_parse = bpy_context_temp_override_extract_known_args(_keywords, kwds); const int parse_result = _PyArg_ParseTupleAndKeywordsFast(args, |