From 3540d66b669af54900b2e4bfc0ab82960e84a471 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Fri, 12 Nov 2010 03:51:28 -0500 Subject: Fix memory leak in fnmatch --- posix/Makefile | 10 ++++++++-- posix/fnmatch_loop.c | 8 +++----- posix/tst-fnmatch.c | 5 ++++- 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'posix') diff --git a/posix/Makefile b/posix/Makefile index 356896f..373e50b 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -115,7 +115,8 @@ generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \ tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \ tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \ bug-ga2.mtrace bug-ga2-mem bug-glob2.mtrace bug-glob2-mem \ - tst-vfork3-mem tst-vfork3.mtrace getconf.speclist + tst-vfork3-mem tst-vfork3.mtrace getconf.speclist \ + tst-fnmatch-mem tst-fnmatch.mtrace include ../Rules @@ -235,7 +236,7 @@ ifeq (no,$(cross-compiling)) tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \ $(objpfx)bug-regex21-mem $(objpfx)bug-regex31-mem $(objpfx)tst-rxspencer-mem\ $(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out \ - $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem + $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem $(objpfx)tst-fnmatch-mem xtests: $(objpfx)bug-ga2-mem endif @@ -247,6 +248,11 @@ annexc-CFLAGS = -O $(objpfx)annexc: annexc.c $(native-compile) +tst-fnmatch-ENV += MALLOC_TRACE=$(objpfx)tst-fnmatch.mtrace + +$(objpfx)tst-fnmatch-mem: $(objpfx)tst-fnmatch.out + $(common-objpfx)malloc/mtrace $(objpfx)tst-fnmatch.mtrace > $@ + bug-regex2-ENV = MALLOC_TRACE=$(objpfx)bug-regex2.mtrace $(objpfx)bug-regex2-mem: $(objpfx)bug-regex2.out diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c index c8e52a6..6b0224e 100644 --- a/posix/fnmatch_loop.c +++ b/posix/fnmatch_loop.c @@ -1114,18 +1114,16 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, int malloced = ! __libc_use_alloca (alloca_used + slen); \ if (__builtin_expect (malloced, 0)) \ { \ - newp = alloca_account (slen, alloca_used); \ - any_malloced = 1; \ - } \ - else \ - { \ newp = malloc (slen); \ if (newp == NULL) \ { \ retval = -2; \ goto out; \ } \ + any_malloced = 1; \ } \ + else \ + newp = alloca_account (slen, alloca_used); \ newp->next = NULL; \ newp->malloced = malloced; \ *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0'); \ diff --git a/posix/tst-fnmatch.c b/posix/tst-fnmatch.c index 25471f8..7e1f73a 100644 --- a/posix/tst-fnmatch.c +++ b/posix/tst-fnmatch.c @@ -1,5 +1,5 @@ /* Tests for fnmatch function. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2010 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,6 +25,7 @@ #include #include #include +#include static char *next_input (char **line, int first, int last); @@ -46,6 +47,8 @@ main (void) size_t escpatternlen = 0; int nr = 0; + mtrace (); + /* Read lines from stdin with the following format: locale input-string match-string flags result -- cgit v1.1