diff options
author | Andreas Schwab <schwab@redhat.com> | 2010-11-12 03:51:28 -0500 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2010-11-12 03:51:28 -0500 |
commit | 3540d66b669af54900b2e4bfc0ab82960e84a471 (patch) | |
tree | 2798b4dfa450db317e823ab8af0c2cdb2f340fa2 /posix | |
parent | 13b695749acf88139a2ce1ed2c949e0e64300a9b (diff) | |
download | glibc-3540d66b669af54900b2e4bfc0ab82960e84a471.tar.gz |
Fix memory leak in fnmatch
Diffstat (limited to 'posix')
-rw-r--r-- | posix/Makefile | 10 | ||||
-rw-r--r-- | posix/fnmatch_loop.c | 8 | ||||
-rw-r--r-- | posix/tst-fnmatch.c | 5 |
3 files changed, 15 insertions, 8 deletions
diff --git a/posix/Makefile b/posix/Makefile index 356896f7cc..373e50b0a9 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 c8e52a6b4d..6b0224ea2c 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 25471f8e41..7e1f73a975 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 <stdlib.h> #include <string.h> #include <sys/types.h> +#include <mcheck.h> 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 |