strftime/1: fix validation of non-string argument with number input
There was a incorrect else, that caused jq to not ensure that the argument to strftime/1 is a string when the input is a number; this ends up calling jv_string_value on a non-string value, which does not work, and causes an assert failure. Also fix same bug in strflocaltime/1. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=67403
This commit is contained in:
1 parent
6f67bae60b
commit
1411ce63d5
2 files changed
+13
-4
No files matched your search
+4
-4
@@ -1599,9 +1599,9 @@ static jv f_strftime(jq_state *jq, jv a, jv b) {
|
||||
}
|
||||
} else if (jv_get_kind(a) != JV_KIND_ARRAY) {
|
||||
return ret_error2(a, b, jv_string("strftime/1 requires parsed datetime inputs"));
|
||||
} else if (jv_get_kind(b) != JV_KIND_STRING) {
|
||||
return ret_error2(a, b, jv_string("strftime/1 requires a string format"));
|
||||
}
|
||||
if (jv_get_kind(b) != JV_KIND_STRING)
|
||||
return ret_error2(a, b, jv_string("strftime/1 requires a string format"));
|
||||
struct tm tm;
|
||||
if (!jv2tm(a, &tm))
|
||||
return ret_error(b, jv_string("strftime/1 requires parsed datetime inputs"));
|
||||
@@ -1630,9 +1630,9 @@ static jv f_strflocaltime(jq_state *jq, jv a, jv b) {
|
||||
a = f_localtime(jq, a);
|
||||
} else if (jv_get_kind(a) != JV_KIND_ARRAY) {
|
||||
return ret_error2(a, b, jv_string("strflocaltime/1 requires parsed datetime inputs"));
|
||||
} else if (jv_get_kind(b) != JV_KIND_STRING) {
|
||||
return ret_error2(a, b, jv_string("strflocaltime/1 requires a string format"));
|
||||
}
|
||||
if (jv_get_kind(b) != JV_KIND_STRING)
|
||||
return ret_error2(a, b, jv_string("strflocaltime/1 requires a string format"));
|
||||
struct tm tm;
|
||||
if (!jv2tm(a, &tm))
|
||||
return ret_error(b, jv_string("strflocaltime/1 requires parsed datetime inputs"));
|
||||
|
||||
Reference in new issue
Block a user