diff --git a/src/builtin.c b/src/builtin.c index d4869387..3e99c376 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -1461,6 +1461,7 @@ static jv f_strptime(jq_state *jq, jv a, jv b) { do { \ jv n = jv_array_get(jv_copy(j), (i)); \ if (jv_get_kind(n) != (JV_KIND_NUMBER)) { \ + jv_free(n); \ jv_free(j); \ return 0; \ } \ @@ -1630,7 +1631,7 @@ static jv f_strflocaltime(jq_state *jq, jv a, jv b) { } struct tm tm; if (!jv2tm(a, &tm)) - return jv_invalid_with_msg(jv_string("strflocaltime/1 requires parsed datetime inputs")); + return ret_error(b, jv_string("strflocaltime/1 requires parsed datetime inputs")); const char *fmt = jv_string_value(b); size_t alloced = strlen(fmt) + 100; char *buf = alloca(alloced); diff --git a/tests/jq.test b/tests/jq.test index 0a97e7ef..4e0b950d 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1511,6 +1511,19 @@ gmtime 1425599507 [2015,2,5,23,51,47,4,63] +# test invalid tm input +try strftime("%Y-%m-%dT%H:%M:%SZ") catch . +["a",1,2,3,4,5,6,7] +"strftime/1 requires parsed datetime inputs" + +try strflocaltime("%Y-%m-%dT%H:%M:%SZ") catch . +["a",1,2,3,4,5,6,7] +"strflocaltime/1 requires parsed datetime inputs" + +try mktime catch . +["a",1,2,3,4,5,6,7] +"mktime requires parsed datetime inputs" + # module system import "a" as foo; import "b" as bar; def fooa: foo::a; [fooa, bar::a, bar::b, foo::a] null