diff options
author | Jo-Philipp Wich <jo@mein.io> | 2020-09-12 00:21:05 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-09-12 00:31:23 +0200 |
commit | 6778d654de4a2a97254684a8418f4464ec163a64 (patch) | |
tree | 56a7e5346ac3b84d800ba75b6e98c611425603ca /eval.c | |
parent | 0329d7d1708f37396d63eb1801b671f16999390f (diff) |
eval: improve error messages on null dereference
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 24 |
1 files changed, 20 insertions, 4 deletions
@@ -229,7 +229,8 @@ ut_ref_to_str(struct ut_state *state, uint32_t off) switch (op ? op->type : 0) { case T_DOT: s = ut_ref_to_str(state, op->tree.operand[0]); - n1 = strlen(s ? s : "(null)"); + s = s ? s : "(...)"; + n1 = strlen(s); l = ((op2 ? op2->type : 0) == T_LABEL) ? json_object_get_string(op2->val) : "???"; n2 = strlen(l); @@ -239,7 +240,7 @@ ut_ref_to_str(struct ut_state *state, uint32_t off) if (!p) return NULL; - snprintf(p, n1 + n2 + 2, "%s.%s", s ? s : "(null)", l); + snprintf(p, n1 + n2 + 2, "%s.%s", s, l); free(s); return p; @@ -249,9 +250,24 @@ ut_ref_to_str(struct ut_state *state, uint32_t off) return NULL; s = ut_ref_to_str(state, op->tree.operand[0]); - n1 = strlen(s ? s : "(null)"); + s = s ? s : "(...)"; + n1 = strlen(s); + + switch (op2 ? op2->type : 0) { + case T_STRING: + l = json_object_to_json_string(op2->val); + break; + + case T_NUMBER: + case T_LABEL: + case T_BOOL: + l = json_object_get_string(op2->val); + break; + + default: + l = "..."; + } - l = "..."; n2 = strlen(l); p = calloc(1, n1 + n2 + 3); |