QUERY · ISSUE
Assertion error on invalid string to compile()
bug
Port, board and/or hardware
unix port, coverage variant, x86_64 linux
MicroPython version
MicroPython v1.26.0-preview.521.g658a2e3dbd on 2025-08-02; linux [GCC 12.2.0] version
Reproduction
>>> compile("a\\\n", "", "eval")
micropython: ../../py/emitbc.c:356: mp_emit_bc_end_pass: Assertion `emit->stack_size == 0' failed.
Expected behaviour
Should throw a SyntaxError
Observed behaviour
crashes with an assertion failure
Additional Information
This crash was found by aflplusplus and minimized manually.
Code of Conduct
Yes, I agree
CANDIDATE · PULL REQUEST
py/builtinevex: Add input validation to compile()
Fixes #17817
Problem:
compile() accepts non-string inputs for source, filename, and mode arguments without validation, leading to assertion failures or undefined behavior.
Solution:
- Validate that source, filename, and mode are all strings
- Raise
TypeErrorwith descriptive message for invalid types - Fail fast before attempting to use invalid inputs
Impact:
- Prevents assertion failures from invalid compile() arguments
- Provides clear error messages for misuse
- Matches CPython's validation behavior