diff --git a/builtin.c b/builtin.c index 9089d47d..69a41392 100644 --- a/builtin.c +++ b/builtin.c @@ -781,7 +781,6 @@ static jv f_type(jv input) { static jv f_error(jv input, jv msg) { jv_free(input); - msg = f_tostring(msg); return jv_invalid_with_msg(msg); } diff --git a/main.c b/main.c index 80497e77..edf3f4fa 100644 --- a/main.c +++ b/main.c @@ -127,7 +127,12 @@ static int process(jq_state *jq, jv value, int flags) { if (jv_invalid_has_msg(jv_copy(result))) { // Uncaught jq exception jv msg = jv_invalid_get_msg(jv_copy(result)); - fprintf(stderr, "jq: error: %s\n", jv_string_value(msg)); + if (jv_get_kind(msg) == JV_KIND_STRING) { + fprintf(stderr, "jq: error: %s\n", jv_string_value(msg)); + } else { + msg = jv_dump_string(msg, 0); + fprintf(stderr, "jq: error (not a string): %s\n", jv_string_value(msg)); + } jv_free(msg); } jv_free(result);