summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jq.pyx8
-rw-r--r--tests/jq_tests.py12
2 files changed, 19 insertions, 1 deletions
diff --git a/jq.pyx b/jq.pyx
index 085a345..5e49c34 100644
--- a/jq.pyx
+++ b/jq.pyx
@@ -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"‽",