]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix memory leak for some invalid regular expressions.
authorUlrich Drepper <drepper@gmail.com>
Mon, 11 Oct 2010 15:46:22 +0000 (11:46 -0400)
committerPetr Baudis <pasky@suse.cz>
Tue, 9 Nov 2010 01:34:05 +0000 (02:34 +0100)
(cherry picked from commit a129c80d54ec951567caa8c1b042275422d5f367)

ChangeLog
posix/regcomp.c

index 73cd52856d652d21a1133c48f17e38cea19fd0c5..a35f75ac7ffa003470f93d7dbc9dd8cbea541d67 100644 (file)
--- 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.
index 542b848f141507f902ca66791eecf73f3ce9ebf7..e70de870bcb92f10c4657eab46425a780e53218c 100644 (file)
@@ -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;
     }