From dbaf6d16cefaa08da8db2d97f1b937d2bcbb94db Mon Sep 17 00:00:00 2001 From: Slendi Date: Sun, 27 Jul 2025 22:44:02 +0300 Subject: [PATCH] Fix more leaks... Signed-off-by: Slendi --- programs/dcfg_dump.c | 1 + src/dcfg.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/programs/dcfg_dump.c b/programs/dcfg_dump.c index 713bb92..7f228a6 100644 --- a/programs/dcfg_dump.c +++ b/programs/dcfg_dump.c @@ -33,6 +33,7 @@ int main(int argc, char *argv[]) if (!value) { printf("Failed to parse DCFG file. Error: %s\n", dcfg_last_error(instance)); + dcfg_destroy_instance(instance); return 1; } diff --git a/src/dcfg.c b/src/dcfg.c index 53ca885..badea08 100644 --- a/src/dcfg.c +++ b/src/dcfg.c @@ -931,6 +931,10 @@ AST *parser_parse_value(Parser *parser) && parser->cur.type != TokenType_String) { strcpy(parser->instance->last_error, "Expected identifier or string for object key"); + for (size_t i = 0; i < vector_size(ast->v.bl.entryv); i++) { + AST_free_parser(ast->v.bl.entryv[i].k, parser); + AST_free_parser(ast->v.bl.entryv[i].v, parser); + } vector_free(ast->v.bl.entryv); FREE(ast); return NULL; @@ -940,6 +944,10 @@ AST *parser_parse_value(Parser *parser) if (!Parser_accept(parser, TokenType_Set, NULL)) { strcpy(parser->instance->last_error, "Expected = after object key"); + for (size_t i = 0; i < vector_size(ast->v.bl.entryv); i++) { + AST_free_parser(ast->v.bl.entryv[i].k, parser); + AST_free_parser(ast->v.bl.entryv[i].v, parser); + } vector_free(ast->v.bl.entryv); FREE(ast); return NULL;