Fix another memory leak in regexp compiler (BZ #17069)

This commit is contained in:
Andreas Schwab 2014-06-20 12:41:27 +02:00
parent 7892406e35
commit aa6ec754f3
4 changed files with 15 additions and 4 deletions

View File

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

2
NEWS
View File

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

View File

@ -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);
}

View File

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