summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2010-10-11 11:46:22 -0400
committerPetr Baudis <pasky@suse.cz>2010-11-09 02:34:05 +0100
commit8a69e300d5529d84bff72b17eeaaf9140e44052d (patch)
treeec5d3f82c4f119555cc5b66ec74865ddf9f8d290
parentf3a97f4c2c783e6e93fc6094e1a8d181b3f53b09 (diff)
Fix memory leak for some invalid regular expressions.
(cherry picked from commit a129c80d54ec951567caa8c1b042275422d5f367)
-rw-r--r--ChangeLog5
-rw-r--r--posix/regcomp.c10
2 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 73cd52856d..a35f75ac7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2010-10-11 Ulrich Drepper <drepper@gmail.com>
+ * posix/regcomp.c (parse_bracket_exp): Add missing re_free calls.
+
+ [BZ #12078]
+ * posix/regcomp.c (parse_sub_exp): Free tree data when it is not used.
+
[BZ #12093]
* sysdeps/unix/sysv/linux/check_pf.c (__check_pf): ->ifa_addr might
be NULL.
diff --git a/posix/regcomp.c b/posix/regcomp.c
index 542b848f14..e70de870bc 100644
--- a/posix/regcomp.c
+++ b/posix/regcomp.c
@@ -2412,7 +2412,11 @@ parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
{
tree = parse_reg_exp (regexp, preg, token, syntax, nest, err);
if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0))
- *err = REG_EPAREN;
+ {
+ if (tree != NULL)
+ free_tree (NULL, tree);
+ *err = REG_EPAREN;
+ }
if (BE (*err != REG_NOERROR, 0))
return NULL;
}
@@ -3022,6 +3026,10 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
if (BE (sbcset == NULL, 0))
#endif /* RE_ENABLE_I18N */
{
+ re_free (sbcset);
+#ifdef RE_ENABLE_I18N
+ re_free (mbcset);
+#endif
*err = REG_ESPACE;
return NULL;
}