From d7839de1f27a72aed84080756ce95231093b997a Mon Sep 17 00:00:00 2001 From: itchyny Date: Mon, 26 Jun 2023 23:12:29 +0900 Subject: [PATCH] Fix halt_error to output the message in raw mode as documented --- src/main.c | 3 ++- tests/shtest | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 5f9e2b977f..1cc6542558 100644 --- a/src/main.c +++ b/src/main.c @@ -217,7 +217,8 @@ static int process(jq_state *jq, jv value, int flags, int dumpopts) { jv error_message = jq_get_error_message(jq); if (jv_get_kind(error_message) == JV_KIND_STRING) { // No prefix should be added to the output of `halt_error`. - fprintf(stderr, "%s", jv_string_value(error_message)); + fwrite(jv_string_value(error_message), 1, + jv_string_length_bytes(jv_copy(error_message)), stderr); } else if (jv_get_kind(error_message) == JV_KIND_NULL) { // Halt with no output } else if (jv_is_valid(error_message)) { diff --git a/tests/shtest b/tests/shtest index dc9e4ad0bf..4a4f855a64 100755 --- a/tests/shtest +++ b/tests/shtest @@ -279,7 +279,11 @@ if [ -n "$($VALGRIND $Q $JQ -n '"xyz\n" | halt_error(1)' 2>/dev/null)" ]; then echo "jq halt_error(1) had unexpected output on stdout" 1>&2 exit 1 fi -if [ "$($VALGRIND $Q $JQ -n '"xyz\n" | halt_error(1)' 2>&1)" != "xyz" ]; then +if [ "$($VALGRIND $Q $JQ -n '"xy" | halt_error(1)' 2>&1 || echo "z")" != "xyz" ]; then + echo "jq halt_error(1) had unexpected output" 1>&2 + exit 1 +fi +if [ "$($VALGRIND $Q $JQ -n '"x\u0000y\u0000z" | halt_error(1)' 2>&1 | tr '\0' '.')" != "x.y.z" ]; then echo "jq halt_error(1) had unexpected output" 1>&2 exit 1 fi