From b7e1eff8436f6e0c4aac440036092fcf96f82960 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 19 Apr 2018 08:28:04 +0300 Subject: bpo-33299: Return an object itself for some types in _PyCode_ConstantKey(). (GH-6513) --- Python/compile.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'Python') diff --git a/Python/compile.c b/Python/compile.c index 62fe971739..6053db2a12 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -5299,10 +5299,12 @@ dict_keys_inorder(PyObject *dict, Py_ssize_t offset) return NULL; while (PyDict_Next(dict, &pos, &k, &v)) { i = PyLong_AS_LONG(v); - /* The keys of the dictionary are tuples. (see compiler_add_o - * and _PyCode_ConstantKey). The object we want is always second, - * though. */ - k = PyTuple_GET_ITEM(k, 1); + /* The keys of the dictionary can be tuples wrapping a contant. + * (see compiler_add_o and _PyCode_ConstantKey). In that case + * the object we want is always second. */ + if (PyTuple_CheckExact(k)) { + k = PyTuple_GET_ITEM(k, 1); + } Py_INCREF(k); assert((i - offset) < size); assert((i - offset) >= 0); -- cgit v1.2.1