From b3eca30011cf36ce595dfd905450d33809a45e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20Sch=C3=B6bel?= <jonathan@xn--schbel-yxa.info> Date: Wed, 3 Apr 2024 10:03:27 +0200 Subject: [PATCH] Grammar: fix rule_add The allocated memory wasn't freed in case of an error. Also the wrong constant has been used, which happens to be the same. --- gsat.geany | 2 +- src/lib/grammar.c | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gsat.geany b/gsat.geany index 9bcc78f..5dc7bf7 100644 --- a/gsat.geany +++ b/gsat.geany @@ -40,7 +40,7 @@ FILE_NAME_7=937;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprg FILE_NAME_8=909;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Fstatus.h;0;8 FILE_NAME_9=3758;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Flog.c;0;8 FILE_NAME_10=1373;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Flog.h;0;8 -FILE_NAME_11=22090;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Fgrammar.c;0;8 +FILE_NAME_11=19166;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Fgrammar.c;0;8 FILE_NAME_12=6103;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Fgrammar.h;0;8 FILE_NAME_13=6482;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Ffile.c;0;8 FILE_NAME_14=1457;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDocuments%2Fprojects%2Fprgm%2Flanguage%2FGSAT%2Fsrc%2Flib%2Ffile.h;0;8 diff --git a/src/lib/grammar.c b/src/lib/grammar.c index de78082..a686f52 100644 --- a/src/lib/grammar.c +++ b/src/lib/grammar.c @@ -866,7 +866,7 @@ add_rule (struct GR_Grammar * grammar, struct rule_info rule, < grammar->rule_n) { set_status (status, E_DOMAIN, 2, "too many rules"); - return SYMBOL_ERR; + return RULE_ERR; } new_rules = realloc (grammar->rules, sizeof (struct rule_info) @@ -874,7 +874,7 @@ add_rule (struct GR_Grammar * grammar, struct rule_info rule, if (NULL == new_rules) { set_status (status, E_ALLOC, 3, "realloc failed"); - return SYMBOL_ERR; + return RULE_ERR; } grammar->rules = new_rules; @@ -934,7 +934,13 @@ GR_Grammar_add_rule (struct GR_Grammar * grammar, return RULE_ERR; } - return add_rule (grammar, rule_data, status); + if (RULE_ERR == add_rule (grammar, rule_data, status)) + { + Rule_free (&rule_data.rule); + return RULE_ERR; + } + + return rule_data.id; } rule_t @@ -965,10 +971,15 @@ GR_Grammar_raw_add_rule (struct GR_Grammar * grammar, Rule_move (&rule_data.rule, rule); + if (RULE_ERR == add_rule (grammar, rule_data, status)) + { + return RULE_ERR; + } + /* let the caller reuse the rule */ Rule_init (rule); - return add_rule (grammar, rule_data, status); + return rule_data.id; } /*@null@*/ -- GitLab