From f06deb828a318536b85d68280d429c3a70b21259 Mon Sep 17 00:00:00 2001 From: William Langford Date: Mon, 4 Dec 2017 19:20:58 -0500 Subject: Fix #1534 --- src/util.c | 7 ++++++- tests/shtest | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/util.c b/src/util.c index 4a1b4bf5..991598ea 100644 --- a/src/util.c +++ b/src/util.c @@ -410,6 +410,7 @@ jv jq_util_input_get_current_line(jq_state* jq) { // When slurping, it returns just one value jv jq_util_input_next_input(jq_util_input_state *state) { int is_last = 0; + int has_more = 0; jv value = jv_invalid(); // need more input do { if (state->parser == NULL) { @@ -444,13 +445,17 @@ jv jq_util_input_next_input(jq_util_input_state *state) { if (jv_is_valid(value)) { state->slurped = jv_array_append(state->slurped, value); value = jv_invalid(); + // When slurping an input that doesn't have a trailing newline, + // we might have more than one value on the same line, so let's check + // to see if we have more data to parse. + has_more = jv_parser_remaining(state->parser); } else if (jv_invalid_has_msg(jv_copy(value))) return value; // Not slurped parsed input } else if (jv_is_valid(value) || jv_invalid_has_msg(jv_copy(value))) { return value; } } - } while (!is_last); + } while (!is_last || has_more); if (jv_is_valid(state->slurped)) { value = state->slurped; diff --git a/tests/shtest b/tests/shtest index af1b159e..41209b22 100755 --- a/tests/shtest +++ b/tests/shtest @@ -122,6 +122,12 @@ if $VALGRIND $Q $JQ -e . $d/input; then exit 2 fi +# Regression test for #1534 +echo "[1,2,3,4]" > $d/expected +printf "[1,2][3,4]" | $JQ -cs add > $d/out 2>&1 +cmp $d/out $d/expected + + ## Test streaming parser ## If we add an option to stream to the `import ... as $symbol;` directive -- cgit v1.2.3