Fix a memory leak found by IBM's BEAM checker.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14527
This commit is contained in:
Florian Krohm
2014-09-12 20:53:43 +00:00
parent 92f1abda37
commit e2234c97c2

View File

@@ -1351,22 +1351,29 @@ Bool MC_(read_extra_suppression_info) ( Int fd, HChar** bufpp,
}
} else if (VG_(get_supp_kind)(su) == FishyValueSupp) {
MC_FishyValueExtra *extra;
HChar *p;
HChar *p, *function_name, *argument_name = NULL;
eof = VG_(get_line) ( fd, bufpp, nBufp, lineno );
if (eof) return True;
extra = VG_(malloc)("mc.resi.3", sizeof *extra);
extra->function_name = VG_(strdup)("mv.resi.4", *bufpp);
// The suppression string is: function_name(argument_name)
p = VG_(strchr)(extra->function_name, '(');
if (p == NULL) return False; // malformed suppression string
*p++ = '\0';
extra->argument_name = p;
p = VG_(strchr)(p, ')');
if (p == NULL) return False; // malformed suppression string
*p = '\0';
function_name = VG_(strdup)("mv.resi.4", *bufpp);
p = VG_(strchr)(function_name, '(');
if (p != NULL) {
*p++ = '\0';
argument_name = p;
p = VG_(strchr)(p, ')');
if (p != NULL)
*p = '\0';
}
if (p == NULL) { // malformed suppression string
VG_(free)(function_name);
return False;
}
extra = VG_(malloc)("mc.resi.3", sizeof *extra);
extra->function_name = function_name;
extra->argument_name = argument_name;
VG_(set_supp_extra)(su, extra);
}