-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirtype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Description
Crash report
What happened?
Using struct to process zero-width Pascal strings ("0p") can lead to an assertion failure or SystemError.
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 current main (8f82d9aa219):
$ make clean && ./configure --with-pydebug && make -j
$ ./python -VV
Python 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]
Linked PRs
Metadata
Metadata
Assignees
Labels
extension-modulesC modules in the Modules dirC modules in the Modules dirtype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump