diff options
author | itchyny <itchyny@cybozu.co.jp> | 2023-07-08 16:58:04 +0900 |
---|---|---|
committer | Nico Williams <nico@cryptonector.com> | 2023-07-12 09:40:05 -0500 |
commit | b5c4c3d67decec22d34f494a200af59bbcadcc80 (patch) | |
tree | 94a7bd1bf5928046bedd8460ab737a6728f672de | |
parent | 14e5e630edb85ffeb8a1eb5549f6c1b6e1b6bb27 (diff) |
Fix has(nan) on arrays to output false
-rw-r--r-- | src/jv_aux.c | 10 | ||||
-rw-r--r-- | tests/jq.test | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/jv_aux.c b/src/jv_aux.c index 994285a5..3153d6e6 100644 --- a/src/jv_aux.c +++ b/src/jv_aux.c @@ -214,10 +214,14 @@ jv jv_has(jv t, jv k) { jv_free(elem); } else if (jv_get_kind(t) == JV_KIND_ARRAY && jv_get_kind(k) == JV_KIND_NUMBER) { - jv elem = jv_array_get(t, (int)jv_number_value(k)); - ret = jv_bool(jv_is_valid(elem)); + if (jvp_number_is_nan(k)) { + ret = jv_false(); + } else { + jv elem = jv_array_get(t, (int)jv_number_value(k)); + ret = jv_bool(jv_is_valid(elem)); + jv_free(elem); + } jv_free(k); - jv_free(elem); } else { ret = jv_invalid_with_msg(jv_string_fmt("Cannot check whether %s has a %s key", jv_kind_name(jv_get_kind(t)), diff --git a/tests/jq.test b/tests/jq.test index 3d0135b0..39620433 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1389,6 +1389,10 @@ map(has(2)) [[0,1], ["a","b","c"]] [false, true] +has(nan) +[0,1,2] +false + keys [42,3,35] [0,1,2] |