aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-07-09 22:18:07 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-07-09 22:18:07 +0200
commit2b06086473b466fe989ce8629f941b9539ba1095 (patch)
tree1806bb0f81c0fb9afe6d417dbf6fa62e27789f3e /src
parent81f2c76e51801b352961ca482294ed2dd31437af (diff)
Patch use-after-free
Diffstat (limited to 'src')
-rw-r--r--src/parser.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/parser.c b/src/parser.c
index 3fdde5e..defe47d 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -269,7 +269,7 @@ parseexpratom(ast_t *ast, lexemes_t toks)
return i;
}
- idx_t i = astalloc(ast);
+ idx_t i = astalloc(ast), rhs;
ast->lexemes[i] = toksidx;
@@ -287,15 +287,18 @@ parseexpratom(ast_t *ast, lexemes_t toks)
just ignoring it in parsing though, because we need to
disallow the statements ‘x := 0; +x = 1;’ */
ast->kinds[i] = ASTUNPLUS;
- ast->kids[i].rhs = parseexpratom(ast, toks);
+ rhs = parseexpratom(ast, toks);
+ ast->kids[i].rhs = rhs;
break;
case LEXMINUS:
ast->kinds[i] = ASTUNNEG;
- ast->kids[i].rhs = parseexpratom(ast, toks);
+ rhs = parseexpratom(ast, toks);
+ ast->kids[i].rhs = rhs;
break;
case LEXTILDE:
ast->kinds[i] = ASTUNCMPL;
- ast->kids[i].rhs = parseexpratom(ast, toks);
+ rhs = parseexpratom(ast, toks);
+ ast->kids[i].rhs = rhs;
break;
default:
err("parser: Invalid expression leaf");