From 17a319d1208336065f4d813685e61dab99d54213 Mon Sep 17 00:00:00 2001 From: "David R. MacIver" Date: Sun, 8 Dec 2013 15:28:29 +0000 Subject: [PATCH 1/2] args to jq_compile_args were not getting freed when there were errors in the compile --- execute.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/execute.c b/execute.c index ef727dc3..387bf389 100644 --- a/execute.c +++ b/execute.c @@ -770,12 +770,12 @@ int jq_compile_args(jq_state *jq, const char* str, jv args) { program = gen_var_binding(gen_const(value), jv_string_value(name), program); jv_free(name); } - jv_free(args); nerrors = builtins_bind(jq, &program); if (nerrors == 0) { nerrors = block_compile(program, &locations, &jq->bc); } } + jv_free(args); if (nerrors) { jv s = jv_string_fmt("%d compile %s", nerrors, nerrors > 1 ? "errors" : "error"); From 4b48054f41e000fde098a6c1606e0a4396d11f7f Mon Sep 17 00:00:00 2001 From: "David R. MacIver" Date: Sun, 8 Dec 2013 16:19:12 +0000 Subject: [PATCH 2/2] test for losing memory on compile errors --- jq_test.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/jq_test.c b/jq_test.c index f10a258a..b6220c70 100644 --- a/jq_test.c +++ b/jq_test.c @@ -248,4 +248,11 @@ static void jv_test() { jv_free(o2); } + + /// Compile errors + { + jq_state *jq = jq_init(); + jq_compile_args(jq, "}", jv_array()); + jq_teardown(&jq); + } }