summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoritchyny <itchyny@cybozu.co.jp>2023-07-08 16:58:04 +0900
committerNico Williams <nico@cryptonector.com>2023-07-12 09:40:05 -0500
commitb5c4c3d67decec22d34f494a200af59bbcadcc80 (patch)
tree94a7bd1bf5928046bedd8460ab737a6728f672de
parent14e5e630edb85ffeb8a1eb5549f6c1b6e1b6bb27 (diff)
Fix has(nan) on arrays to output false
-rw-r--r--src/jv_aux.c10
-rw-r--r--tests/jq.test4
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]