Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Here's a minimal reproduction:
» ./python.exePython 3.12.0a1+ (heads/main:bded5edd9a, Oct 27 2022, 23:29:21) [Clang 11.0.0 (clang-1100.0.33.16)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> class SubStr(str): ...... >>> int.from_bytes(b"0", SubStr("big"))Assertion failed: (PyUnicode_CheckExact(str1)), function _PyUnicode_Equal, file Objects/unicodeobject.c, line 10447.[1] 18466 abort ./python.exeI think this happes because of these lines:
cpython/Objects/unicodeobject.c
Lines 10444 to 10453 inbded5ed
| int | |
| _PyUnicode_Equal(PyObject*str1,PyObject*str2) | |
| { | |
| assert(PyUnicode_CheckExact(str1)); | |
| assert(PyUnicode_CheckExact(str2)); | |
| if (str1==str2) { | |
| return1; | |
| } | |
| returnunicode_compare_eq(str1,str2); | |
| } |
_PyUnicode_Equal usesassert(PyUnicode_CheckExact(...)), while many function (includingint_from_bytes_impl) usePyUnicode_Check() or just parsestr objects from args.
Lines 6167 to 6170 inbded5ed
| elseif (_PyUnicode_Equal(byteorder,&_Py_ID(little))) | |
| little_endian=1; | |
| elseif (_PyUnicode_Equal(byteorder,&_Py_ID(big))) | |
| little_endian=0; |
Probably other functions that use_PyUnicode_Equal are also affected.
I would like to raise a question: shouldn't it beassert(PyUnicode_Check(...)) in_PyUnicode_Equal?
I would like to send a PR with the fix!