Skip to content

sys.audit(0) aborts due to an assertion in debug build #126018

Closed
@devdanzin

Description

@devdanzin

Crash report

What happened?

There is an assert in sysmodule.c that makes the interpreter abort when calling sys.audit with a non-string value in debug builds:

assert(PyUnicode_Check(args[0]));

Python 3.14.0a1+ (heads/main:c5b99f5c2c, Oct 26 2024, 12:35:53) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.audit(9)
python: ./Python/sysmodule.c:522: sys_audit: Assertion `PyUnicode_Check(args[0])' failed.
Aborted (core dumped)

This assert seems completely unnecessary, as the code that runs the hooks (which only triggers if there is some hook registered) will raise an exception if the first argument to sys.audit isn't a string:

Python 3.14.0a1+ (heads/remove_sysaudit_assert:ba8ac4d398, Oct 26 2024, 19:45:11) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.addaudithook(lambda *args: None)
>>> sys.audit(9)
Traceback (most recent call last):
  File "<python-input-2>", line 1, in <module>
    sys.audit(9)
    ~~~~~~~~~^^^
TypeError: expected str for argument 'event', not int

I'll submit a trivial PR removing this assert.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux, Windows

Output from running 'python -VV' on the command line:

Python 3.14.0a1+ (heads/main:c5b99f5c2c, Oct 26 2024, 12:35:53) [GCC 13.2.0]

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixesextension-modulesC modules in the Modules dirinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions