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]