From 11432f7a08fd0795df7617d1e01bf39a6706f24a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 10 Jul 2026 18:38:33 +0100 Subject: Fix leak when slurping invalid text --- jq.pyx | 3 +++ tests/jq_tests.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/jq.pyx b/jq.pyx index 6c21b57..7d2875b 100644 --- a/jq.pyx +++ b/jq.pyx @@ -433,6 +433,9 @@ cdef class _ResultIterator(object): except StopIteration: self._slurp = False break + except: + jv_free(value) + raise else: value = self._parse_next_input() diff --git a/tests/jq_tests.py b/tests/jq_tests.py index 69eccb2..1a891e6 100644 --- a/tests/jq_tests.py +++ b/tests/jq_tests.py @@ -129,6 +129,17 @@ def test_can_slurp_and_produce_multiple_output_values(): assert_equal([1, 2, 3], result) +def test_slurping_invalid_input_text_raises_error(): + program = jq.compile(".") + + try: + program.input_text("!!", slurp=True).all() + assert False, "Expected error" + except ValueError as error: + expected_error_str = "parse error: Invalid numeric literal at EOF at line 1, column 2" + assert_equal(str(error), expected_error_str) + + def test_when_text_method_is_used_on_result_then_output_is_serialised_to_json_string(): assert_equal( '"42"', -- cgit v1.2.3