[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