New submission from Pochang Chen <johnchen...@gmail.com>:
Relevant code (Objects/listobject.c lines 2268 -- 2286 as of commit e76ac9d): /* Choose the best compare, given what we now know about the keys. */ if (keys_are_all_same_type) { if (key_type == &PyUnicode_Type && strings_are_latin) { ms.key_compare = unsafe_latin_compare; } else if (key_type == &PyLong_Type && ints_are_bounded) { ms.key_compare = unsafe_long_compare; } else if (key_type == &PyFloat_Type) { ms.key_compare = unsafe_float_compare; } else if ((ms.key_richcompare = key_type->tp_richcompare) != NULL) { ms.key_compare = unsafe_object_compare; } } else { ms.key_compare = safe_object_compare; } Clearly, ms.key_compare is not assigned here if keys_are_all_same_type is true but key_type->tp_richcompare is NULL. I don't know how to obtain an object with ob_type->tp_richcompare being NULL, though. ---------- components: Interpreter Core messages: 320679 nosy: johnchen902 priority: normal severity: normal status: open title: ms.key_compare is not initialized in all pathes of list_sort_impl type: crash versions: Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33989> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com