diff options
author | Ulrich Drepper <drepper@gmail.com> | 2010-10-11 22:46:44 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2010-10-11 22:46:44 -0400 |
commit | e9b9cbf5e9bdcda6f0b50456658bac748202dd70 (patch) | |
tree | f7c25be42fb102aa3f4d7d611e14ac6d84b82eca /posix/regcomp.c | |
parent | ef06edbee6463061a7f3dcbd2f56a625b41a4810 (diff) | |
download | glibc-e9b9cbf5e9bdcda6f0b50456658bac748202dd70.zip glibc-e9b9cbf5e9bdcda6f0b50456658bac748202dd70.tar.gz glibc-e9b9cbf5e9bdcda6f0b50456658bac748202dd70.tar.bz2 |
More regex memory leak fixes and tests.
Diffstat (limited to 'posix/regcomp.c')
-rw-r--r-- | posix/regcomp.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/posix/regcomp.c b/posix/regcomp.c index 9f5ca2c..4ee7b90 100644 --- a/posix/regcomp.c +++ b/posix/regcomp.c @@ -2164,12 +2164,15 @@ parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, } if (tree != NULL && exp != NULL) { - tree = create_tree (dfa, tree, exp, CONCAT); - if (tree == NULL) + bin_tree_t *newtree = create_tree (dfa, tree, exp, CONCAT); + if (newtree == NULL) { + postorder (exp, free_tree, NULL); + postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } + tree = newtree; } else if (tree == NULL) tree = exp; @@ -2420,7 +2423,7 @@ parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) { if (tree != NULL) - free_tree (NULL, tree); + postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (BE (*err != REG_NOERROR, 0)) |