summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Langford <wlangfor@gmail.com>2017-12-04 19:20:58 -0500
committerWilliam Langford <wlangfor@gmail.com>2017-12-04 19:20:58 -0500
commitf06deb828a318536b85d68280d429c3a70b21259 (patch)
treed059d84e84ab29abf069b7ba0d8f476dabaa8a70
parent0c9eacedaae1e0d53e265a35830f6e7ebd04cc53 (diff)
Fix #1534
-rw-r--r--src/util.c7
-rwxr-xr-xtests/shtest6
2 files changed, 12 insertions, 1 deletions
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