QUERY · ISSUE
core: assertion error on syntactically invalid Python code
bug
Port, board and/or hardware
unix VARIANT=coverage
MicroPython version
MicroPython v1.26.0-preview.387.g67acac257f.dirty on 2025-07-19; linux [GCC 12.2.0] version
Reproduction
Run the following code:
def f(a, b): pass
f(None, x=b"", y:=True)
Expected behaviour
Code is rejected at byte-compile time similar to Python:
File "/tmp/qstrcrash.py", line 2
f(None, x=b"", y:=True)
^
SyntaxError: positional argument follows keyword argument
Observed behaviour
The file byte-compiles but an assertion error occurs when executing the call to f:
micropython: ../../py/qstr.c:198: find_qstr: Assertion `*q < pool->len' failed.
Additional Information
This is a minimized test case based on a crash found by fuzzing micropython
Code of Conduct
Yes, I agree
CANDIDATE · PULL REQUEST
py/emitbc: Handle invalid syntax gracefully instead of assertion
py-core
Fixes #17817
Root cause: When compile() is given syntactically invalid code like a line continuation at EOF, the parser may accept it but leave the emit stack in a non-zero state. The assertion in mp_emit_bc_end_pass() then fails.
Fix: Replace the assertion with a proper SyntaxError exception.
Test: Added test case in tests/basics/builtin_compile.py