summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2017-05-06 16:56:07 +0000
committerph10 <ph10@6239d852-aaf2-0410-a92c-79f79f948069>2017-05-06 16:56:07 +0000
commitfcc05a01a8c1f87b3286a27dffc508dd5b0ced31 (patch)
treef831e5389f5692d454b30b0c3a46826acee357b2
parentb5c23b406b97caab0665750d1c6d2ea628f46116 (diff)
downloadpcre2-fcc05a01a8c1f87b3286a27dffc508dd5b0ced31.tar.gz
Fix crash when more than one kind of "push" was set in pcre2test.
git-svn-id: svn://vcs.exim.org/pcre2/code/trunk@767 6239d852-aaf2-0410-a92c-79f79f948069
-rw-r--r--ChangeLog3
-rw-r--r--src/pcre2test.c15
-rw-r--r--testdata/testinput2044
-rw-r--r--testdata/testoutput2047
4 files changed, 67 insertions, 42 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d00069..cfb7b63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -153,6 +153,9 @@ tests to improve coverage.
30. Implement (?n: for PCRE2_NO_AUTO_CAPTURE, because Perl now has this.
+31. If more than one of "push", "pushcopy", or "pushtablescopy" were set in
+pcre2test, a crash could occur.
+
Version 10.23 14-February-2017
------------------------------
diff --git a/src/pcre2test.c b/src/pcre2test.c
index a7fe7c0..cab604f 100644
--- a/src/pcre2test.c
+++ b/src/pcre2test.c
@@ -721,12 +721,15 @@ the first control word. Note that CTL_POSIX_NOSUB is always accompanied by
CTL_POSIX, so it doesn't need its own entries. */
static uint32_t exclusive_pat_controls[] = {
- CTL_POSIX | CTL_HEXPAT,
- CTL_POSIX | CTL_PUSH,
- CTL_POSIX | CTL_PUSHCOPY,
- CTL_POSIX | CTL_PUSHTABLESCOPY,
- CTL_POSIX | CTL_USE_LENGTH,
- CTL_EXPAND | CTL_HEXPAT };
+ CTL_POSIX | CTL_HEXPAT,
+ CTL_POSIX | CTL_PUSH,
+ CTL_POSIX | CTL_PUSHCOPY,
+ CTL_POSIX | CTL_PUSHTABLESCOPY,
+ CTL_POSIX | CTL_USE_LENGTH,
+ CTL_PUSH | CTL_PUSHCOPY,
+ CTL_PUSH | CTL_PUSHTABLESCOPY,
+ CTL_PUSHCOPY | CTL_PUSHTABLESCOPY,
+ CTL_EXPAND | CTL_HEXPAT };
/* Data controls that are mutually exclusive. At present these are all in the
first control word. */
diff --git a/testdata/testinput20 b/testdata/testinput20
index c87a07e..71f39ae 100644
--- a/testdata/testinput20
+++ b/testdata/testinput20
@@ -31,20 +31,20 @@
#load testsaved2
#pop info
- foofoo
+ foofoo
barbar
-
+
#pop mark
C
-\= Expect no match
- D
-
+\= Expect no match
+ D
+
#pop
- AmanaplanacanalPanama
+ AmanaplanacanalPanama
#pop info
metcalfe 33
-
+
# Check for an error when different tables are used.
/abc/push,tables=1
@@ -59,30 +59,30 @@
#pop should give an error
pqr
-
+
/abcd/pushcopy
abcd
-
+
#pop
- abcd
+ abcd
#pop should give an error
/abcd/push
#popcopy
abcd
-
+
#pop
- abcd
-
+ abcd
+
/abcd/push
#save testsaved1
#pop should give an error
#load testsaved1
-#popcopy
+#popcopy
abcd
-
+
#pop
abcd
@@ -91,10 +91,18 @@
/abcd/pushtablescopy
abcd
-#popcopy
+#popcopy
abcd
-
+
#pop
- abcd
+ abcd
+
+# Must only specify one of these
+
+//push,pushcopy
+
+//push,pushtablescopy
+
+//pushcopy,pushtablescopy
# End of testinput20
diff --git a/testdata/testoutput20 b/testdata/testoutput20
index db99866..d6265fd 100644
--- a/testdata/testoutput20
+++ b/testdata/testoutput20
@@ -40,25 +40,25 @@ Named capturing subpatterns:
Options: dupnames
Starting code units: b f
Subject length lower bound = 6
- foofoo
+ foofoo
0: foofoo
1: foo
barbar
0: barbar
1: <unset>
2: bar
-
+
#pop mark
C
0: C
1: C
MK: A
-\= Expect no match
- D
+\= Expect no match
+ D
No match, mark = A
-
+
#pop
- AmanaplanacanalPanama
+ AmanaplanacanalPanama
0: AmanaplanacanalPanama
1: <unset>
2: <unset>
@@ -78,7 +78,7 @@ Subject length lower bound = 3
0: metcalfe 33
1: metcalfe
2: 33
-
+
# Check for an error when different tables are used.
/abc/push,tables=1
@@ -97,13 +97,13 @@ Serialization failed: error -30: patterns do not all use the same character tabl
#pop should give an error
** Can't pop off an empty stack
pqr
-
+
/abcd/pushcopy
abcd
0: abcd
-
+
#pop
- abcd
+ abcd
0: abcd
#pop should give an error
@@ -113,21 +113,21 @@ Serialization failed: error -30: patterns do not all use the same character tabl
#popcopy
abcd
0: abcd
-
+
#pop
- abcd
+ abcd
0: abcd
-
+
/abcd/push
#save testsaved1
#pop should give an error
** Can't pop off an empty stack
#load testsaved1
-#popcopy
+#popcopy
abcd
0: abcd
-
+
#pop
abcd
0: abcd
@@ -139,12 +139,23 @@ Serialization failed: error -30: patterns do not all use the same character tabl
abcd
0: abcd
-#popcopy
+#popcopy
abcd
0: abcd
-
+
#pop
- abcd
+ abcd
0: abcd
+# Must only specify one of these
+
+//push,pushcopy
+** Not allowed together: push pushcopy
+
+//push,pushtablescopy
+** Not allowed together: push pushtablescopy
+
+//pushcopy,pushtablescopy
+** Not allowed together: pushcopy pushtablescopy
+
# End of testinput20