[PATCH v3 1/1] tools/winedump : Avoid potential memory leaks
David Kahurani
k.kahurani at gmail.com
Sat Oct 9 08:00:07 CDT 2021
ct->expression gets overwritten with each call to strmake. Save
its address in a temporary variable inorder to free it later
on and avoid a memory leak
Signed-off-by: David Kahurani <k.kahurani at gmail.com>
---
tools/winedump/msmangle.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/winedump/msmangle.c b/tools/winedump/msmangle.c
index cf26a07..a087ae8 100644
--- a/tools/winedump/msmangle.c
+++ b/tools/winedump/msmangle.c
@@ -533,7 +533,6 @@ static char *demangle_datatype (char **str, compound_type *ct,
if (*iter == '6')
{
int sub_expressions = 0;
- /* FIXME: there are tons of memory leaks here */
/* FIXME: this is still broken in some cases and it has to be
* merged with the function prototype parsing above...
*/
@@ -550,15 +549,25 @@ static char *demangle_datatype (char **str, compound_type *ct,
if (!demangle_datatype (&iter, &sub_ct, sym))
return NULL;
if (sub_expressions)
+ {
+ char *tmp = ct->expression;
ct->expression = strmake( "%s, %s", ct->expression, sub_ct.expression );
+ free(tmp);
+ }
else
+ {
+ char *tmp = ct->expression;
ct->expression = strmake( "%s%s", ct->expression, sub_ct.expression );
+ free(tmp);
+ }
while (*iter == '@') iter++;
sub_expressions++;
}
} else while (*iter == '@') iter++;
iter++;
+ char *tmp = ct->expression;
ct->expression = strmake( "%s)", ct->expression );
+ free(tmp);
}
else
return NULL;
--
2.33.0
More information about the wine-devel
mailing list