https://github.com/python/cpython/commit/401fff7423ca3c8bf1d02e594edfd1412616a559
commit: 401fff7423ca3c8bf1d02e594edfd1412616a559
branch: main
author: Sam Gross <[email protected]>
committer: colesbury <[email protected]>
date: 2024-09-14T14:29:55-04:00
summary:

gh-121459: Add missing return to _PyDict_LoadGlobalStackRef (#124085)

We need to return immediately if there's an error during dictionary
lookup.

Also avoid the conditional-if operator. MSVC versions through v19.27 miscompile
compound literals with side effects within a conditional operator. This caused
crashes in the Windows10 buildbot.

files:
M Objects/dictobject.c

diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 006bc593c2a754..db21961bad266b 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1550,7 +1550,12 @@ _Py_dict_lookup_threadsafe_stackref(PyDictObject *mp, 
PyObject *key, Py_hash_t h
 {
     PyObject *val;
     Py_ssize_t ix = _Py_dict_lookup(mp, key, hash, &val);
-       *value_addr = val == NULL ? PyStackRef_NULL : 
PyStackRef_FromPyObjectNew(val);
+    if (val == NULL) {
+        *value_addr = PyStackRef_NULL;
+    }
+    else {
+        *value_addr = PyStackRef_FromPyObjectNew(val);
+    }
     return ix;
 }
 
@@ -2483,7 +2488,7 @@ _PyDict_LoadGlobalStackRef(PyDictObject *globals, 
PyDictObject *builtins, PyObje
     /* namespace 1: globals */
     ix = _Py_dict_lookup_threadsafe_stackref(globals, key, hash, res);
     if (ix == DKIX_ERROR) {
-        *res = PyStackRef_NULL;
+        return;
     }
     if (ix != DKIX_EMPTY && !PyStackRef_IsNull(*res)) {
         return;

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to