fix: heap-use-after-free and memory leaks on erorr cases

This commit is contained in:
matteo 2026-01-30 12:21:29 +01:00
parent 5784f557b8
commit 3fa7b97282
4 changed files with 18 additions and 11 deletions

View file

@ -329,12 +329,13 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
struct ast *condition_content = parse_compound_list(ctx);
// Then keyword
token = POP_TOKEN();
token = PEEK_TOKEN();
if (token->type != TOKEN_THEN)
{
perror("Expected the 'then' keyword but token has different type");
return err_if_rule(&condition_content, NULL, NULL);
}
POP_TOKEN();
// Then content
struct ast *then_content = parse_compound_list(ctx);
@ -344,6 +345,7 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
}
struct ast *else_content = NULL;
token = PEEK_TOKEN();
// Eventual else/elif clause(s)
if (is_first(*token, RULE_ELSE_CLAUSE))
{
@ -355,12 +357,13 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
}
// Fi keyword
token = POP_TOKEN();
token = PEEK_TOKEN();
if (token->type != TOKEN_FI)
{
perror("Expected the 'fi' keyword but token has different type");
return err_if_rule(&condition_content, &then_content, &else_content);
}
POP_TOKEN();
// Result
struct ast *result =