mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-13 15:27:18 +00:00
Fix memory leaks in error paths of get_mode().
This commit is contained in:
parent
5098927591
commit
2df94bfc43
8
parse.c
8
parse.c
@ -216,6 +216,8 @@ int get_mode(
|
||||
int ok = expr_ok(mode->offset);
|
||||
if (!ok) {
|
||||
*error = "Invalid expression after '#'";
|
||||
free_tree(mode->offset);
|
||||
mode->offset = NULL;
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
@ -302,6 +304,8 @@ int get_mode(
|
||||
|
||||
if (!expr_ok(mode->offset)) {
|
||||
*error = "Invalid expression";
|
||||
free_tree(mode->offset);
|
||||
mode->offset = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -316,11 +320,15 @@ int get_mode(
|
||||
if (reg == NO_REG) {
|
||||
*error = "Register expected after 'offset('";
|
||||
free_tree(value);
|
||||
free_tree(mode->offset);
|
||||
mode->offset = NULL;
|
||||
return FALSE; /* Syntax error in addressing mode */
|
||||
}
|
||||
if (cp = skipwhite(value->cp), *cp++ != ')') {
|
||||
*error = "')' expected after 'offset(register'";
|
||||
free_tree(value);
|
||||
free_tree(mode->offset);
|
||||
mode->offset = NULL;
|
||||
return FALSE; /* Syntax error in addressing mode */
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user