From: Florian Krohm Date: Fri, 12 Sep 2014 20:53:43 +0000 (+0000) Subject: Fix a memory leak found by IBM's BEAM checker. X-Git-Tag: svn/VALGRIND_3_11_0~1005 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2234c97c20e49cab370d74f4eacdfe606bd490a;p=thirdparty%2Fvalgrind.git Fix a memory leak found by IBM's BEAM checker. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14527 --- diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c index c5f18fe8cd..e6a2133b28 100644 --- a/memcheck/mc_errors.c +++ b/memcheck/mc_errors.c @@ -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); }