From b0d64a3be30d15c9e2ee638f9e0928040fb89bfe Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Mon, 19 Feb 2018 16:54:03 +1100 Subject: [PATCH] oceani: handle NULL from parse_oceani() If the parsed finds nothing, it will return a pointer to a NULL. We need to be careful not to deref this in printing, analysis, or execution. Signed-off-by: NeilBrown --- csrc/oceani.mdc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index c38fce5..8e1cb41 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -1149,6 +1149,8 @@ also want to know what sort of bracketing to use. static void print_exec(struct exec *e, int indent, int bracket) { + if (!e) + return; switch (e->type) { case Xbinode: print_binode(cast(binode, e), indent, bracket); break; @@ -2796,6 +2798,8 @@ analysis is a bit more interesting at this level. struct binode *b = cast(binode, prog); int ok = 1; + if (!b) + return 0; do { ok = 1; propagate_types(b->right, c, &ok, Vnone, 0); @@ -2826,9 +2830,12 @@ analysis is a bit more interesting at this level. static void interp_prog(struct exec *prog, char **argv) { struct binode *p = cast(binode, prog); - struct binode *al = cast(binode, p->left); + struct binode *al; struct value v; + if (!prog) + return; + al = cast(binode, p->left); while (al) { struct var *v = cast(var, al->left); struct value *vl = &v->var->val; -- 2.43.0