summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2015-02-06 12:10:13 +0000
committerph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2015-02-06 12:10:13 +0000
commit2a19539e8399a874fdeea663fd8aa0267f0af3b5 (patch)
treed9e56639cfbf179c591f5af9359937e23a268870
parentfc6c5b29f5a515a1a0c906b4ca38f6937405eef4 (diff)
downloadpcre-2a19539e8399a874fdeea663fd8aa0267f0af3b5.tar.gz
Fix memory leak for subroutine call with more than 10 captured groups to be
saved. git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1517 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--ChangeLog7
-rw-r--r--pcre_exec.c4
2 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index d962488..fe2efb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,7 @@
ChangeLog for PCRE
------------------
-Version 8.37 xx-xxx-201x
+Version 8.37 xx-xxx-2015
------------------------
1. When an (*ACCEPT) is triggered inside capturing parentheses, it arranges
@@ -19,7 +19,10 @@ Version 8.37 xx-xxx-201x
4. An attempt to do global matching in pcretest with a zero-length ovector
caused a crash.
-
+
+5. Fixed a memory leak during matching that could occur for a subpattern
+ subroutine call (recursive or otherwise) if the number of captured groups
+ that had to be saved was greater than ten.
Version 8.36 26-September-2014
diff --git a/pcre_exec.c b/pcre_exec.c
index bb5620d..607aad8 100644
--- a/pcre_exec.c
+++ b/pcre_exec.c
@@ -1840,7 +1840,11 @@ for (;;)
are defined in a range that can be tested for. */
if (rrc >= MATCH_BACKTRACK_MIN && rrc <= MATCH_BACKTRACK_MAX)
+ {
+ if (new_recursive.offset_save != stacksave)
+ (PUBL(free))(new_recursive.offset_save);
RRETURN(MATCH_NOMATCH);
+ }
/* Any return code other than NOMATCH is an error. */