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