diff --git a/src/builtin.c b/src/builtin.c index 2236d17a..0fd75543 100644 --- a/src/builtin.c +++ b/src/builtin.c @@ -359,10 +359,12 @@ static jv f_multiply(jq_state *jq, jv input, jv a, jv b) { str = b; num = a; } - jv res = jv_null(); + jv res; double d = jv_number_value(num); - int n = 0.0 < d && d < 1.0 ? 1 : d; - if (n > 0) { + if (d < 0 || isnan(d)) { + res = jv_null(); + } else { + int n = d; size_t alen = jv_string_length_bytes(jv_copy(str)); res = jv_string_empty(alen * n); for (; n > 0; n--) { diff --git a/tests/jq.test b/tests/jq.test index 35cae263..193025da 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1286,7 +1286,11 @@ indices(", ") [.[] * "abc"] [-1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 3.7, 10.0] -[null,null,null,"abc","abc","abc","abcabcabc","abcabcabcabcabcabcabcabcabcabc"] +[null,null,"","","abc","abc","abcabcabc","abcabcabcabcabcabcabcabcabcabc"] + +[. * (nan,-nan)] +"abc" +[null,null] [.[] / ","] ["a, bc, def, ghij, jklmn, a,b, c,d, e,f", "a,b,c,d, e,f,g,h"]