Marcus Meissner : winedump: Free function_name on all error paths.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Feb 13 11:07:51 CST 2007
Module: wine
Branch: master
Commit: aef6e2d35d267abe08ccd52ec45cd5d53c5fc9d0
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aef6e2d35d267abe08ccd52ec45cd5d53c5fc9d0
Author: Marcus Meissner <marcus at jet.franken.de>
Date: Tue Feb 13 08:49:24 2007 +0100
winedump: Free function_name on all error paths.
---
tools/winedump/msmangle.c | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/tools/winedump/msmangle.c b/tools/winedump/msmangle.c
index c330b8c..574a3b5 100644
--- a/tools/winedump/msmangle.c
+++ b/tools/winedump/msmangle.c
@@ -191,8 +191,10 @@ int symbol_demangle (parsed_symbol *sym)
/* Class the function is associated with, terminated by '@@' */
class_name = name;
while (*name && *name++ != '@') ;
- if (*name++ != '@')
+ if (*name++ != '@') {
+ free (function_name);
return -1;
+ }
class_name = str_substring (class_name, name - 2);
}
@@ -215,6 +217,7 @@ int symbol_demangle (parsed_symbol *sym)
{
if (VERBOSE)
printf ("/*FIXME: %s: unknown data*/\n", sym->symbol);
+ free (function_name);
return -1;
}
sym->flags |= SYM_DATA;
@@ -223,6 +226,7 @@ int symbol_demangle (parsed_symbol *sym)
is_static ? "static_" : "_", function_name);
sym->arg_text[0] = str_create (3, ct.expression, " ", sym->arg_name[0]);
FREE_CT (ct);
+ free (function_name);
return 0;
break;
@@ -238,8 +242,10 @@ int symbol_demangle (parsed_symbol *sym)
if (VERBOSE)
puts ("Demangled symbol OK [vtable]");
+ free (function_name);
return 0;
}
+ free (function_name);
return -1;
break;
@@ -284,6 +290,7 @@ int symbol_demangle (parsed_symbol *sym)
break;
/* FIXME: G,H / O,P / W,X are private / protected / public thunks */
default:
+ free (function_name);
return -1;
}
@@ -297,6 +304,7 @@ int symbol_demangle (parsed_symbol *sym)
case 'C': is_const = CT_VOLATILE; break;
case 'D': is_const = (CT_CONST | CT_VOLATILE); break;
default:
+ free (function_name);
return -1;
}
}
@@ -327,6 +335,7 @@ int symbol_demangle (parsed_symbol *sym)
sym->flags |= SYM_STDCALL;
break;
default:
+ free (function_name);
return -1;
}
@@ -355,8 +364,10 @@ int symbol_demangle (parsed_symbol *sym)
if (*name != '@')
{
INIT_CT (ct);
- if (!demangle_datatype(&name, &ct, sym))
+ if (!demangle_datatype(&name, &ct, sym)) {
+ free (function_name);
return -1;
+ }
if (strcmp (ct.expression, "void"))
{
@@ -381,8 +392,10 @@ int symbol_demangle (parsed_symbol *sym)
/* Functions are always terminated by 'Z'. If we made it this far and
* Don't find it, we have incorrectly identified a data type.
*/
- if (*name != 'Z')
+ if (*name != 'Z') {
+ free (function_name);
return -1;
+ }
/* Note: '()' after 'Z' means 'throws', but we don't care here */
More information about the wine-cvs
mailing list