diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | posix/bug-regex36.c | 4 | ||||
-rw-r--r-- | posix/regcomp.c | 6 |
4 files changed, 15 insertions, 4 deletions
@@ -1,3 +1,10 @@ +2014-06-20 Andreas Schwab <schwab@linux-m68k.org> + + [BZ #17069] + * posix/regcomp.c (parse_reg_exp): Deallocate partially + constructed tree before returning error. + * posix/bug-regexp36.c: Expand test case. + 2014-06-20 Stefan Liebler <stli@linux.vnet.ibm.com> [BZ #6803] @@ -20,7 +20,7 @@ Version 2.20 16854, 16876, 16877, 16878, 16882, 16885, 16888, 16890, 16912, 16915, 16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966, 16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042, - 17048, 17058, 17062. + 17048, 17058, 17062, 17069. * Optimized strchr implementation for AArch64. Contributed by ARM Ltd. diff --git a/posix/bug-regex36.c b/posix/bug-regex36.c index 3dda026585..59e2b6d321 100644 --- a/posix/bug-regex36.c +++ b/posix/bug-regex36.c @@ -1,4 +1,4 @@ -/* Test regcomp not leaking memory on invalid repetition operator +/* Test regcomp not leaking memory on parse errors Copyright (C) 2014 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -24,6 +24,6 @@ main (int argc, char **argv) { regex_t r; mtrace (); - regcomp (&r, "[a]\\{-2,}", 0); + regcomp (&r, "[a]\\|[a]\\{-2,}", 0); regfree (&r); } diff --git a/posix/regcomp.c b/posix/regcomp.c index a5020be192..076eca3e7c 100644 --- a/posix/regcomp.c +++ b/posix/regcomp.c @@ -2154,7 +2154,11 @@ parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, { branch = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && branch == NULL, 0)) - return NULL; + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } } else branch = NULL; |