From 2df94bfc43d906d2eb6c7aec91171b9f4181cbe6 Mon Sep 17 00:00:00 2001 From: Olaf Seibert Date: Sun, 14 Nov 2021 18:58:58 +0100 Subject: [PATCH] Fix memory leaks in error paths of get_mode(). --- parse.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parse.c b/parse.c index 7775732..beaeb3a 100644 --- a/parse.c +++ b/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 */ }