Fix memory leak in fnmatch

This commit is contained in:
Andreas Schwab 2010-11-12 03:51:28 -05:00 committed by Ulrich Drepper
parent 13b695749a
commit 3540d66b66
4 changed files with 24 additions and 8 deletions

View file

@ -1,3 +1,12 @@
2010-11-11 Andreas Schwab <schwab@redhat.com>
* posix/fnmatch_loop.c (NEW_PATTERN): Fix use of alloca.
* posix/Makefile (tests): Add $(objpfx)tst-fnmatch-mem.
(tst-fnmatch-ENV): Set MALLOC_TRACE.
($(objpfx)tst-fnmatch-mem): New rule.
(generated): Add tst-fnmatch-mem and tst-fnmatch.mtrace.
* posix/tst-fnmatch.c (main): Call mtrace.
2010-11-11 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):

View file

@ -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

View file

@ -1113,11 +1113,6 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
slen = sizeof (struct patternlist) + (slen * sizeof (CHAR)); \
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) \
@ -1125,7 +1120,10 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
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'); \

View file

@ -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