Robustness release — same jq semantics (777 conformance tests pass unchanged), no input can crash the parser.
An adversarial fuzz sweep (120k calls) found three inputs that escaped jq's error model; all now raise a clean JqParseError:
- malformed
\uescapes ("\uZZZZ") raisedValueError - Unicode-but-not-ASCII characters after
.(e.g..ä) raisedAttributeError - deeply nested programs (
[[[[…,{a:{a:…) raisedRecursionErrorand could overflow the C stack under a raised recursion limit
The parser now caps structural nesting at a fixed depth that trips under CPython's default recursion limit on every platform, with a backstop catch for long flat pipe/operator chains.