summaryrefslogtreecommitdiffhomepage
path: root/eval.c
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-09-12 00:21:05 +0200
committerJo-Philipp Wich <jo@mein.io>2020-09-12 00:31:23 +0200
commit6778d654de4a2a97254684a8418f4464ec163a64 (patch)
tree56a7e5346ac3b84d800ba75b6e98c611425603ca /eval.c
parent0329d7d1708f37396d63eb1801b671f16999390f (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.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/eval.c b/eval.c
index 0f1d7b2..001c614 100644
--- a/eval.c
+++ b/eval.c
@@ -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);