diff options
| -rw-r--r-- | jq.pyx | 8 | ||||
| -rw-r--r-- | tests/jq_tests.py | 12 |
2 files changed, 19 insertions, 1 deletions
@@ -55,7 +55,7 @@ def jq(object program): raise Exception("jq_init failed") cdef _ErrorStore error_store = _ErrorStore.__new__(_ErrorStore) - error_store._errors = [] + error_store.clear() jq_set_error_cb(jq, store_error, <void*>error_store) @@ -91,6 +91,9 @@ cdef class _ErrorStore(object): cdef void store_error(self, char* error): self._errors.append(error) + + cdef void clear(self): + self._errors = [] cdef class _Program(object): @@ -103,6 +106,9 @@ cdef class _Program(object): def transform(self, input, raw_input=False, raw_output=False, multiple_output=False): string_input = input if raw_input else json.dumps(input) bytes_input = string_input.encode("utf8") + + self._error_store.clear() + result_bytes = self._string_to_strings(bytes_input) if self._error_store.has_errors(): diff --git a/tests/jq_tests.py b/tests/jq_tests.py index 3b24b60..3bf7ffb 100644 --- a/tests/jq_tests.py +++ b/tests/jq_tests.py @@ -93,6 +93,18 @@ def value_error_is_raised_if_input_cannot_be_processed_by_program(): @istest +def errors_do_not_leak_between_transformations(): + program = jq(".x") + try: + program.transform(1) + assert False, "Expected error" + except ValueError as error: + pass + + assert_equal(1, program.transform({"x": 1})) + + +@istest def unicode_strings_can_be_used_as_input(): assert_equal( u"‽", |
