Skip to content

SystemError/Assertion failure when processing struct with '0p' field #124248

Closed

Description

@brianschubert

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 current main and 3.13 tip)
  • struct.unpack("<0p", b"") raises an unexpected SystemError (tested with current main, 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

Activity

  1. added
    type-crashA hard crash of the interpreter, possibly with a core dump
    on Sep 19, 2024
  2. added a commit that references this issue on Sep 20, 2024
  3. added 2 commits that reference this issue on Sep 20, 2024
  4. vstinner commented on Sep 20, 2024

    @vstinner
    Member

    Fixed by change 63f1960.

  5. added a commit that references this issue on Sep 20, 2024
  6. added 2 commits that reference this issue on Sep 22, 2024
  7. added a commit that references this issue on Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    extension-modulesC modules in the Modules dirtype-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions