Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Closed
Description
Crash report
What happened?
Usingstruct to process zero-width Pascal strings ("0p") can lead to an assertion failure orSystemError.
Specifically:
struct.pack("<0p", b"")leads to an assertion failure and seg fault on debug builds (tested with currentmainand 3.13 tip)struct.unpack("<0p", b"")raises an unexpectedSystemError(tested with currentmain, 3.13 tip, non-debug builds of 3.8-3.12)
On currentmain (8f82d9aa219):
$ make clean&& ./configure --with-pydebug&& make -j$ ./python -VVPython 3.14.0a0 (heads/main:8f82d9aa219, Sep 19 2024, 11:08:04) [GCC 11.4.0]$ ./python -c'import struct; struct.unpack("<0p", b"")'Traceback (most recent call last): File"<string>", line 1,in<module> import struct; struct.unpack("<0p", b"")~~~~~~~~~~~~~^^^^^^^^^^^^SystemError: Negative size passed to PyBytes_FromStringAndSize$ ./python -c'import struct; struct.pack("<0p", b"")'python: ./Modules/_struct.c:1991: s_pack_internal: Assertion`_Py_STATIC_CAST(Py_ssize_t, _Py_STATIC_CAST(unsigned char, (n))) == (n)' failed.[1] 186971 IOT instruction (core dumped) ./python -c'import struct; struct.pack("<0p", b"")'
The same behavior is reproducible on the current 3.13 tip (112b1704fa6), and likely previous versions.
PR forthcoming.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.0a0 (heads/main:8f82d9aa219, Sep 19 2024, 11:08:04) [GCC 11.4.0]