]> granicus.if.org Git - jq/commitdiff
Fix #1534
authorWilliam Langford <wlangfor@gmail.com>
Tue, 5 Dec 2017 00:20:58 +0000 (19:20 -0500)
committerWilliam Langford <wlangfor@gmail.com>
Tue, 5 Dec 2017 00:20:58 +0000 (19:20 -0500)
src/util.c
tests/shtest

index 4a1b4bf54a2e775211433609c5c872e4096860e9..991598ea21f019da05ca1ccddbe0fa086d20e8fd 100644 (file)
@@ -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;
index af1b159eb8a2899e5deae6e05c3c154cfaaed34b..41209b22345d9c590bf999687b46ba2a5c56c1f7 100755 (executable)
@@ -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