Fix memory leaks in error paths of get_mode().

This commit is contained in:
Olaf Seibert 2021-11-14 18:58:58 +01:00
parent 5098927591
commit 2df94bfc43

View File

@ -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 */
}