diff options
author | Stephen Dolan <mu@netsoc.tcd.ie> | 2013-05-13 15:42:57 +0100 |
---|---|---|
committer | Stephen Dolan <mu@netsoc.tcd.ie> | 2013-05-13 15:42:57 +0100 |
commit | e13f24ab45c2bc6fead9d698bdeaa84746761692 (patch) | |
tree | f84eb2aad64c833c0d9edfbd2873afb069c7465a | |
parent | 34a63246abe5116cc293490e8d1fcaba9a00e5d9 (diff) |
Better error handling for INSERT opcode
jq 'null | {(.a): 1}' no longer crashes.
-rw-r--r-- | execute.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -250,10 +250,19 @@ jv jq_next(jq_state *jq) { jv v = stack_pop(jq); jv k = stack_pop(jq); jv objv = stack_pop(jq); - assert(jv_get_kind(k) == JV_KIND_STRING); assert(jv_get_kind(objv) == JV_KIND_OBJECT); - stack_push(jq, jv_object_set(objv, k, v)); - stack_push(jq, stktop); + if (jv_get_kind(k) == JV_KIND_STRING) { + stack_push(jq, jv_object_set(objv, k, v)); + stack_push(jq, stktop); + } else { + print_error(jv_invalid_with_msg(jv_string_fmt("Cannot use %s as object key", + jv_kind_name(jv_get_kind(k))))); + jv_free(stktop); + jv_free(v); + jv_free(k); + jv_free(objv); + goto do_backtrack; + } break; } |