This patch frees some leaked variables that occur when errors are detected while adding variables to the parser's symbol table. While not a significant issue currently due to the parser exiting on failures, as the process of library-ifying the parser continues, these need to be addressed. It also makes it easier to use tools like Address Sanitizer on the parser against our test suite.
Signed-off-by: Steve Beattie <[email protected]> --- parser/parser_yacc.y | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) Index: b/parser/parser_yacc.y =================================================================== --- a/parser/parser_yacc.y +++ b/parser/parser_yacc.y @@ -419,14 +419,17 @@ varassign: TOK_SET_VAR TOK_EQUALS valuel PDEBUG("Matched: set assignment for (%s)\n", $1); err = new_set_var(var_name, list->value); if (err) { + free(var_name); yyerror("variable %s was previously declared", $1); /* FIXME: it'd be handy to report the previous location */ } for (list = list->next; list; list = list->next) { err = add_set_value(var_name, list->value); - if (err) + if (err) { + free(var_name); yyerror("Error adding %s to set var %s", list->value, $1); + } } free_value_list($3); free(var_name); @@ -445,13 +448,16 @@ varassign: TOK_SET_VAR TOK_ADD_ASSIGN va * failures are indicative of symtab failures */ err = add_set_value(var_name, list->value); if (err) { + free(var_name); yyerror("variable %s was not previously declared, but is being assigned additional values", $1); } for (list = list->next; list; list = list->next) { err = add_set_value(var_name, list->value); - if (err) + if (err) { + free(var_name); yyerror("Error adding %s to set var %s", list->value, $1); + } } free_value_list($3); free(var_name); @@ -469,11 +475,11 @@ varassign: TOK_BOOL_VAR TOK_EQUALS TOK_V $1, $3); } err = add_boolean_var(var_name, boolean); + free(var_name); if (err) { yyerror("variable %s was previously declared", $1); /* FIXME: it'd be handy to report the previous location */ } - free(var_name); free($1); free($3); } -- Steve Beattie <[email protected]> http://NxNW.org/~steve/
signature.asc
Description: Digital signature
-- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
