Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
b760a69e
Commit
b760a69e
authored
Jun 21, 2016
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'merge-pcre' into 10.0
parents
c84a40bf
1592fbd3
Changes
31
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
3593 additions
and
2242 deletions
+3593
-2242
pcre/AUTHORS
pcre/AUTHORS
+3
-3
pcre/CMakeLists.txt
pcre/CMakeLists.txt
+1
-0
pcre/ChangeLog
pcre/ChangeLog
+93
-1
pcre/LICENCE
pcre/LICENCE
+3
-3
pcre/NEWS
pcre/NEWS
+9
-0
pcre/RunGrepTest
pcre/RunGrepTest
+9
-0
pcre/RunTest
pcre/RunTest
+18
-14
pcre/configure.ac
pcre/configure.ac
+6
-6
pcre/doc/html/pcreapi.html
pcre/doc/html/pcreapi.html
+4
-5
pcre/doc/pcre.txt
pcre/doc/pcre.txt
+967
-968
pcre/doc/pcreapi.3
pcre/doc/pcreapi.3
+5
-6
pcre/pcre_compile.c
pcre/pcre_compile.c
+100
-83
pcre/pcre_get.c
pcre/pcre_get.c
+15
-8
pcre/pcre_internal.h
pcre/pcre_internal.h
+4
-4
pcre/pcre_jit_compile.c
pcre/pcre_jit_compile.c
+2035
-1042
pcre/pcre_jit_test.c
pcre/pcre_jit_test.c
+31
-5
pcre/pcre_study.c
pcre/pcre_study.c
+1
-1
pcre/pcrecpp.cc
pcre/pcrecpp.cc
+65
-65
pcre/pcregrep.c
pcre/pcregrep.c
+1
-1
pcre/pcreposix.c
pcre/pcreposix.c
+4
-2
pcre/pcretest.c
pcre/pcretest.c
+16
-4
pcre/testdata/testinput11
pcre/testdata/testinput11
+2
-0
pcre/testdata/testinput2
pcre/testdata/testinput2
+26
-0
pcre/testdata/testinput6
pcre/testdata/testinput6
+9
-0
pcre/testdata/testinput7
pcre/testdata/testinput7
+4
-0
pcre/testdata/testoutput11-16
pcre/testdata/testoutput11-16
+4
-1
pcre/testdata/testoutput11-32
pcre/testdata/testoutput11-32
+4
-1
pcre/testdata/testoutput11-8
pcre/testdata/testoutput11-8
+4
-1
pcre/testdata/testoutput2
pcre/testdata/testoutput2
+114
-18
pcre/testdata/testoutput6
pcre/testdata/testoutput6
+16
-0
pcre/testdata/testoutput7
pcre/testdata/testoutput7
+20
-0
No files found.
pcre/AUTHORS
View file @
b760a69e
...
...
@@ -8,7 +8,7 @@ Email domain: cam.ac.uk
University of Cambridge Computing Service,
Cambridge, England.
Copyright (c) 1997-201
5
University of Cambridge
Copyright (c) 1997-201
6
University of Cambridge
All rights reserved
...
...
@@ -19,7 +19,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
Copyright(c) 2010-201
5
Zoltan Herczeg
Copyright(c) 2010-201
6
Zoltan Herczeg
All rights reserved.
...
...
@@ -30,7 +30,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
Copyright(c) 2009-201
5
Zoltan Herczeg
Copyright(c) 2009-201
6
Zoltan Herczeg
All rights reserved.
...
...
pcre/CMakeLists.txt
View file @
b760a69e
...
...
@@ -65,6 +65,7 @@
# so it has been removed.
# 2013-10-08 PH got rid of the "source" command, which is a bash-ism (use ".")
# 2013-11-05 PH added support for PARENS_NEST_LIMIT
# 2016-03-01 PH applied Chris Wilson's patch for MSVC static build
PROJECT
(
PCRE C CXX
)
...
...
pcre/ChangeLog
View file @
b760a69e
...
...
@@ -4,12 +4,104 @@ ChangeLog for PCRE
Note that the PCRE 8.xx series (PCRE1) is now in a bugfix-only state. All
development is happening in the PCRE2 10.xx series.
Version 8.39 14-June-2016
-------------------------
1. If PCRE_AUTO_CALLOUT was set on a pattern that had a (?# comment between
an item and its qualifier (for example, A(?#comment)?B) pcre_compile()
misbehaved. This bug was found by the LLVM fuzzer.
2. Similar to the above, if an isolated \E was present between an item and its
qualifier when PCRE_AUTO_CALLOUT was set, pcre_compile() misbehaved. This
bug was found by the LLVM fuzzer.
3. Further to 8.38/46, negated classes such as [^[:^ascii:]\d] were also not
working correctly in UCP mode.
4. The POSIX wrapper function regexec() crashed if the option REG_STARTEND
was set when the pmatch argument was NULL. It now returns REG_INVARG.
5. Allow for up to 32-bit numbers in the ordin() function in pcregrep.
6. An empty \Q\E sequence between an item and its qualifier caused
pcre_compile() to misbehave when auto callouts were enabled. This bug was
found by the LLVM fuzzer.
7. If a pattern that was compiled with PCRE_EXTENDED started with white
space or a #-type comment that was followed by (?-x), which turns off
PCRE_EXTENDED, and there was no subsequent (?x) to turn it on again,
pcre_compile() assumed that (?-x) applied to the whole pattern and
consequently mis-compiled it. This bug was found by the LLVM fuzzer.
8. A call of pcre_copy_named_substring() for a named substring whose number
was greater than the space in the ovector could cause a crash.
9. Yet another buffer overflow bug involved duplicate named groups with a
group that reset capture numbers (compare 8.38/7 below). Once again, I have
just allowed for more memory, even if not needed. (A proper fix is
implemented in PCRE2, but it involves a lot of refactoring.)
10. pcre_get_substring_list() crashed if the use of \K in a match caused the
start of the match to be earlier than the end.
11. Migrating appropriate PCRE2 JIT improvements to PCRE.
12. A pattern such as /(?<=((?C)0))/, which has a callout inside a lookbehind
assertion, caused pcretest to generate incorrect output, and also to read
uninitialized memory (detected by ASAN or valgrind).
13. A pattern that included (*ACCEPT) in the middle of a sufficiently deeply
nested set of parentheses of sufficient size caused an overflow of the
compiling workspace (which was diagnosed, but of course is not desirable).
14. And yet another buffer overflow bug involving duplicate named groups, this
time nested, with a nested back reference. Yet again, I have just allowed
for more memory, because anything more needs all the refactoring that has
been done for PCRE2. An example pattern that provoked this bug is:
/((?J)(?'R'(?'R'(?'R'(?'R'(?'R'(?|(\k'R'))))))))/ and the bug was
registered as CVE-2016-1283.
15. pcretest went into a loop if global matching was requested with an ovector
size less than 2. It now gives an error message. This bug was found by
afl-fuzz.
16. An invalid pattern fragment such as (?(?C)0 was not diagnosing an error
("assertion expected") when (?(?C) was not followed by an opening
parenthesis.
17. Fixed typo ("&&" for "&") in pcre_study(). Fortunately, this could not
actually affect anything, by sheer luck.
18. Applied Chris Wilson's patch (Bugzilla #1681) to CMakeLists.txt for MSVC
static compilation.
19. Modified the RunTest script to incorporate a valgrind suppressions file so
that certain errors, provoked by the SSE2 instruction set when JIT is used,
are ignored.
20. A racing condition is fixed in JIT reported by Mozilla.
21. Minor code refactor to avoid "array subscript is below array bounds"
compiler warning.
22. Minor code refactor to avoid "left shift of negative number" warning.
23. Fix typo causing compile error when 16- or 32-bit JIT is compiled without
UCP support.
24. Refactor to avoid compiler warnings in pcrecpp.cc.
25. Refactor to fix a typo in pcre_jit_test.c
26. Patch to support compiling pcrecpp.cc with Intel compiler.
Version 8.38 23-November-2015
-----------------------------
1. If a group that contained a recursive back reference also contained a
forward reference subroutine call followed by a non-forward-reference
subroutine call, for example /.((?2)(?R)\1)()/, pcre
2
_compile() failed to
subroutine call, for example /.((?2)(?R)\1)()/, pcre_compile() failed to
compile correct code, leading to undefined behaviour or an internally
detected error. This bug was discovered by the LLVM fuzzer.
...
...
pcre/LICENCE
View file @
b760a69e
...
...
@@ -25,7 +25,7 @@ Email domain: cam.ac.uk
University of Cambridge Computing Service,
Cambridge, England.
Copyright (c) 1997-201
5
University of Cambridge
Copyright (c) 1997-201
6
University of Cambridge
All rights reserved.
...
...
@@ -36,7 +36,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
Copyright(c) 2010-201
5
Zoltan Herczeg
Copyright(c) 2010-201
6
Zoltan Herczeg
All rights reserved.
...
...
@@ -47,7 +47,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
Copyright(c) 2009-201
5
Zoltan Herczeg
Copyright(c) 2009-201
6
Zoltan Herczeg
All rights reserved.
...
...
pcre/NEWS
View file @
b760a69e
News about PCRE releases
------------------------
Release 8.39 14-June-2016
-------------------------
Some appropriate PCRE2 JIT improvements have been retro-fitted to PCRE1. Apart
from that, this is another bug-fix release. Note that this library (now called
PCRE1) is now being maintained for bug fixes only. New projects are advised to
use the new PCRE2 libraries.
Release 8.38 23-November-2015
-----------------------------
...
...
pcre/RunGrepTest
View file @
b760a69e
...
...
@@ -67,6 +67,15 @@ fi
./pcretest
-C
utf
>
/dev/null
utf8
=
$?
# We need valgrind suppressions when JIT is in use. (This isn't perfect because
# some tests are run with -no-jit, but as PCRE1 is in maintenance only, I have
# not bothered about that.)
./pcretest
-C
jit
>
/dev/null
if
[
$?
-eq
1
-a
"
$valgrind
"
!=
""
]
;
then
valgrind
=
"
$valgrind
--suppressions=./testdata/valgrind-jit.supp"
fi
echo
"Testing pcregrep main features"
echo
"---------------------------- Test 1 ------------------------------"
>
testtrygrep
...
...
pcre/RunTest
View file @
b760a69e
...
...
@@ -178,6 +178,7 @@ nojit=
sim
=
skip
=
valgrind
=
vjs
=
# This is in case the caller has set aliases (as I do - PH)
unset cp ls mv rm
...
...
@@ -357,6 +358,9 @@ $sim ./pcretest -C jit >/dev/null
jit
=
$?
if
[
$jit
-ne
0
-a
"
$nojit
"
!=
"yes"
]
;
then
jitopt
=
-s
+
if
[
"
$valgrind
"
!=
""
]
;
then
vjs
=
"--suppressions=
$testdata
/valgrind-jit.supp"
fi
fi
# If no specific tests were requested, select all. Those that are not
...
...
@@ -423,7 +427,7 @@ for bmode in "$test8" "$test16" "$test32"; do
if
[
$do1
=
yes
]
;
then
echo
$title1
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput1 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput1 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput1 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -441,7 +445,7 @@ fi
if
[
$do2
=
yes
]
;
then
echo
$title2
"(not UTF-
$bits
)"
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput2 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput2 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput2 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -504,7 +508,7 @@ if [ $do3 = yes ] ; then
if
[
"
$locale
"
!=
""
]
;
then
echo
$title3
"(using '
$locale
' locale)"
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$infile
testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$infile
testtry
if
[
$?
=
0
]
;
then
if
$cf
$outfile
testtry
>
teststdout
||
\
$cf
$outfile2
testtry
>
teststdout
||
\
...
...
@@ -540,7 +544,7 @@ if [ $do4 = yes ] ; then
echo
" Skipped because UTF-
$bits
support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput4 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput4 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput4 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -560,7 +564,7 @@ if [ $do5 = yes ] ; then
echo
" Skipped because UTF-
$bits
support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput5 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput5 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput5 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -580,7 +584,7 @@ if [ $do6 = yes ] ; then
echo
" Skipped because Unicode property support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput6 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput6 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput6 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -602,7 +606,7 @@ if [ $do7 = yes ] ; then
echo
" Skipped because Unicode property support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput7 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput7 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput7 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -698,7 +702,7 @@ if [ $do12 = yes ] ; then
if
[
$jit
-eq
0
-o
"
$nojit
"
=
"yes"
]
;
then
echo
" Skipped because JIT is not available or not usable"
else
$sim
$valgrind
./pcretest
-q
$bmode
$testdata
/testinput12 testtry
$sim
$valgrind
$vjs
./pcretest
-q
$bmode
$testdata
/testinput12 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput12 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -735,7 +739,7 @@ if [ "$do14" = yes ] ; then
cp
-f
$testdata
/saved16 testsaved16
cp
-f
$testdata
/saved32 testsaved32
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput14 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput14 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput14 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -759,7 +763,7 @@ if [ "$do15" = yes ] ; then
echo
" Skipped because UTF-
$bits
support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput15 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput15 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput15 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -783,7 +787,7 @@ if [ $do16 = yes ] ; then
echo
" Skipped because Unicode property support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput16 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput16 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput16 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -805,7 +809,7 @@ if [ $do17 = yes ] ; then
echo
" Skipped when running 8-bit tests"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput17 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput17 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput17 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -829,7 +833,7 @@ if [ $do18 = yes ] ; then
echo
" Skipped because UTF-
$bits
support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput18 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput18 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput18-
$bits
testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
@@ -853,7 +857,7 @@ if [ $do19 = yes ] ; then
echo
" Skipped because Unicode property support is not available"
else
for
opt
in
""
"-s"
$jitopt
;
do
$sim
$valgrind
./pcretest
-q
$bmode
$opt
$testdata
/testinput19 testtry
$sim
$valgrind
${
opt
:+
$vjs
}
./pcretest
-q
$bmode
$opt
$testdata
/testinput19 testtry
if
[
$?
=
0
]
;
then
$cf
$testdata
/testoutput19 testtry
if
[
$?
!=
0
]
;
then
exit
1
;
fi
...
...
pcre/configure.ac
View file @
b760a69e
...
...
@@ -9,18 +9,18 @@ dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
dnl be defined as -RC2, for example. For real releases, it should be empty.
m4_define(pcre_major, [8])
m4_define(pcre_minor, [3
8
])
m4_define(pcre_minor, [3
9
])
m4_define(pcre_prerelease, [])
m4_define(pcre_date, [201
5-11-23
])
m4_define(pcre_date, [201
6-06-14
])
# NOTE: The CMakeLists.txt file searches for the above variables in the first
# 50 lines of this file. Please update that if the variables above are moved.
# Libtool shared library interface versions (current:revision:age)
m4_define(libpcre_version, [3:
6
:2])
m4_define(libpcre16_version, [2:
6
:2])
m4_define(libpcre32_version, [0:
6
:0])
m4_define(libpcreposix_version, [0:
3
:0])
m4_define(libpcre_version, [3:
7
:2])
m4_define(libpcre16_version, [2:
7
:2])
m4_define(libpcre32_version, [0:
7
:0])
m4_define(libpcreposix_version, [0:
4
:0])
m4_define(libpcrecpp_version, [0:1:0])
AC_PREREQ(2.57)
...
...
pcre/doc/html/pcreapi.html
View file @
b760a69e
...
...
@@ -315,9 +315,8 @@ documentation for details of how to do this. It is a non-standard way of
building PCRE, for use in environments that have limited stacks. Because of the
greater use of memory management, it runs more slowly. Separate functions are
provided so that special-purpose external code can be used for this case. When
used, these functions are always called in a stack-like manner (last obtained,
first freed), and always for memory blocks of the same size. There is a
discussion about PCRE's stack usage in the
used, these functions always allocate memory blocks of the same size. There is
a discussion about PCRE's stack usage in the
<a
href=
"pcrestack.html"
><b>
pcrestack
</b></a>
documentation.
</P>
...
...
@@ -2913,9 +2912,9 @@ Cambridge CB2 3QH, England.
</P>
<br><a
name=
"SEC26"
href=
"#TOC1"
>
REVISION
</a><br>
<P>
Last updated:
09 February 2014
Last updated:
18 December 2015
<br>
Copyright
©
1997-201
4
University of Cambridge.
Copyright
©
1997-201
5
University of Cambridge.
<br>
<p>
Return to the
<a
href=
"index.html"
>
PCRE index page
</a>
.
...
...
pcre/doc/pcre.txt
View file @
b760a69e
...
...
@@ -1814,8 +1814,7 @@ PCRE API OVERVIEW
ments that have limited stacks. Because of the greater use of memory
management, it runs more slowly. Separate functions are provided so
that special-purpose external code can be used for this case. When
used, these functions are always called in a stack-like manner (last
obtained, first freed), and always for memory blocks of the same size.
used, these functions always allocate memory blocks of the same size.
There is a discussion about PCRE's stack usage in the pcrestack docu-
mentation.
...
...
@@ -4276,8 +4275,8 @@ AUTHOR
REVISION
Last updated:
09 February 2014
Copyright (c) 1997-201
4
University of Cambridge.
Last updated:
18 December 2015
Copyright (c) 1997-201
5
University of Cambridge.
------------------------------------------------------------------------------
...
...
pcre/doc/pcreapi.3
View file @
b760a69e
.TH PCREAPI 3 "
09 February 2014" "PCRE 8.35
"
.TH PCREAPI 3 "
18 December 2015" "PCRE 8.39
"
.SH NAME
PCRE - Perl-compatible regular expressions
.sp
...
...
@@ -273,9 +273,8 @@ documentation for details of how to do this. It is a non-standard way of
building PCRE, for use in environments that have limited stacks. Because of the
greater use of memory management, it runs more slowly. Separate functions are
provided so that special-purpose external code can be used for this case. When
used, these functions are always called in a stack-like manner (last obtained,
first freed), and always for memory blocks of the same size. There is a
discussion about PCRE's stack usage in the
used, these functions always allocate memory blocks of the same size. There is
a discussion about PCRE's stack usage in the
.\" HREF
\fBpcrestack\fP
.\"
...
...
@@ -2914,6 +2913,6 @@ Cambridge CB2 3QH, England.
.rs
.sp
.nf
Last updated:
09 February 2014
Copyright (c) 1997-201
4
University of Cambridge.
Last updated:
18 December 2015
Copyright (c) 1997-201
5
University of Cambridge.
.fi
pcre/pcre_compile.c
View file @
b760a69e
This diff is collapsed.
Click to expand it.
pcre/pcre_get.c
View file @
b760a69e
...
...
@@ -250,6 +250,7 @@ It returns the number of the first one that was set in a pattern match.
code the compiled regex
stringname the name of the capturing substring
ovector the vector of matched substrings
stringcount number of captured substrings
Returns: the number of the first that is set,
or the number of the last one if none are set,
...
...
@@ -258,13 +259,16 @@ Returns: the number of the first that is set,
#if defined COMPILE_PCRE8
static
int
get_first_set
(
const
pcre
*
code
,
const
char
*
stringname
,
int
*
ovector
)
get_first_set
(
const
pcre
*
code
,
const
char
*
stringname
,
int
*
ovector
,
int
stringcount
)
#elif defined COMPILE_PCRE16
static
int
get_first_set
(
const
pcre16
*
code
,
PCRE_SPTR16
stringname
,
int
*
ovector
)
get_first_set
(
const
pcre16
*
code
,
PCRE_SPTR16
stringname
,
int
*
ovector
,
int
stringcount
)
#elif defined COMPILE_PCRE32
static
int
get_first_set
(
const
pcre32
*
code
,
PCRE_SPTR32
stringname
,
int
*
ovector
)
get_first_set
(
const
pcre32
*
code
,
PCRE_SPTR32
stringname
,
int
*
ovector
,
int
stringcount
)
#endif
{
const
REAL_PCRE
*
re
=
(
const
REAL_PCRE
*
)
code
;
...
...
@@ -295,7 +299,7 @@ if (entrysize <= 0) return entrysize;
for
(
entry
=
(
pcre_uchar
*
)
first
;
entry
<=
(
pcre_uchar
*
)
last
;
entry
+=
entrysize
)
{
int
n
=
GET2
(
entry
,
0
);
if
(
ovector
[
n
*
2
]
>=
0
)
return
n
;
if
(
n
<
stringcount
&&
ovector
[
n
*
2
]
>=
0
)
return
n
;
}
return
GET2
(
entry
,
0
);
}
...
...
@@ -402,7 +406,7 @@ pcre32_copy_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
PCRE_UCHAR32
*
buffer
,
int
size
)
#endif
{
int
n
=
get_first_set
(
code
,
stringname
,
ovector
);
int
n
=
get_first_set
(
code
,
stringname
,
ovector
,
stringcount
);
if
(
n
<=
0
)
return
n
;
#if defined COMPILE_PCRE8
return
pcre_copy_substring
(
subject
,
ovector
,
stringcount
,
n
,
buffer
,
size
);
...
...
@@ -457,7 +461,10 @@ pcre_uchar **stringlist;
pcre_uchar
*
p
;
for
(
i
=
0
;
i
<
double_count
;
i
+=
2
)
size
+=
sizeof
(
pcre_uchar
*
)
+
IN_UCHARS
(
ovector
[
i
+
1
]
-
ovector
[
i
]
+
1
);
{
size
+=
sizeof
(
pcre_uchar
*
)
+
IN_UCHARS
(
1
);
if
(
ovector
[
i
+
1
]
>
ovector
[
i
])
size
+=
IN_UCHARS
(
ovector
[
i
+
1
]
-
ovector
[
i
]);
}
stringlist
=
(
pcre_uchar
**
)(
PUBL
(
malloc
))(
size
);
if
(
stringlist
==
NULL
)
return
PCRE_ERROR_NOMEMORY
;
...
...
@@ -473,7 +480,7 @@ p = (pcre_uchar *)(stringlist + stringcount + 1);
for
(
i
=
0
;
i
<
double_count
;
i
+=
2
)
{
int
len
=
ovector
[
i
+
1
]
-
ovector
[
i
]
;
int
len
=
(
ovector
[
i
+
1
]
>
ovector
[
i
])
?
(
ovector
[
i
+
1
]
-
ovector
[
i
])
:
0
;
memcpy
(
p
,
subject
+
ovector
[
i
],
IN_UCHARS
(
len
));
*
stringlist
++
=
p
;
p
+=
len
;
...
...
@@ -619,7 +626,7 @@ pcre32_get_named_substring(const pcre32 *code, PCRE_SPTR32 subject,
PCRE_SPTR32
*
stringptr
)
#endif
{
int
n
=
get_first_set
(
code
,
stringname
,
ovector
);
int
n
=
get_first_set
(
code
,
stringname
,
ovector
,
stringcount
);
if
(
n
<=
0
)
return
n
;
#if defined COMPILE_PCRE8
return
pcre_get_substring
(
subject
,
ovector
,
stringcount
,
n
,
stringptr
);
...
...
pcre/pcre_internal.h
View file @
b760a69e
...
...
@@ -7,7 +7,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Copyright (c) 1997-201
4
University of Cambridge
Copyright (c) 1997-201
6
University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
...
...
@@ -275,7 +275,7 @@ pcre.h(.in) and disable (comment out) this message. */
typedef
pcre_uint16
pcre_uchar
;
#define UCHAR_SHIFT (1)
#define IN_UCHARS(x) ((x)
<< UCHAR_SHIFT
)
#define IN_UCHARS(x) ((x)
* 2
)
#define MAX_255(c) ((c) <= 255u)
#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default))
...
...
@@ -283,7 +283,7 @@ typedef pcre_uint16 pcre_uchar;
typedef
pcre_uint32
pcre_uchar
;
#define UCHAR_SHIFT (2)
#define IN_UCHARS(x) ((x)
<< UCHAR_SHIFT
)
#define IN_UCHARS(x) ((x)
* 4
)
#define MAX_255(c) ((c) <= 255u)
#define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default))
...
...
@@ -2289,7 +2289,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9,
ERR50
,
ERR51
,
ERR52
,
ERR53
,
ERR54
,
ERR55
,
ERR56
,
ERR57
,
ERR58
,
ERR59
,
ERR60
,
ERR61
,
ERR62
,
ERR63
,
ERR64
,
ERR65
,
ERR66
,
ERR67
,
ERR68
,
ERR69
,
ERR70
,
ERR71
,
ERR72
,
ERR73
,
ERR74
,
ERR75
,
ERR76
,
ERR77
,
ERR78
,
ERR79
,
ERR80
,
ERR81
,
ERR82
,
ERR83
,
ERR84
,
ERR85
,
ERR86
,
ERRCOUNT
};
ERR80
,
ERR81
,
ERR82
,
ERR83
,
ERR84
,
ERR85
,
ERR86
,
ERR
87
,
ERR
COUNT
};
/* JIT compiling modes. The function list is indexed by them. */
...
...
pcre/pcre_jit_compile.c
View file @
b760a69e
This diff is collapsed.
Click to expand it.
pcre/pcre_jit_test.c
View file @
b760a69e
...
...
@@ -242,13 +242,17 @@ static struct regression_test_case regression_test_cases[] = {
{
MA
,
0
,
"a
\\
z"
,
"aaa"
},
{
MA
,
0
|
F_NOMATCH
,
"a
\\
z"
,
"aab"
},
/* Brackets. */
/* Brackets
and alternatives
. */
{
MUA
,
0
,
"(ab|bb|cd)"
,
"bacde"
},
{
MUA
,
0
,
"(?:ab|a)(bc|c)"
,
"ababc"
},
{
MUA
,
0
,
"((ab|(cc))|(bb)|(?:cd|efg))"
,
"abac"
},
{
CMUA
,
0
,
"((aB|(Cc))|(bB)|(?:cd|EFg))"
,
"AcCe"
},
{
MUA
,
0
,
"((ab|(cc))|(bb)|(?:cd|ebg))"
,
"acebebg"
},
{
MUA
,
0
,
"(?:(a)|(?:b))(cc|(?:d|e))(a|b)k"
,
"accabdbbccbk"
},
{
MUA
,
0
,
"
\xc7\x82
|
\xc6\x82
"
,
"
\xf1\x83\x82\x82\xc7\x82\xc7\x83
"
},
{
MUA
,
0
,
"=
\xc7\x82
|#
\xc6\x82
"
,
"
\xf1\x83\x82\x82
=
\xc7\x82\xc7\x83
"
},
{
MUA
,
0
,
"
\xc7\x82\xc7\x83
|
\xc6\x82\xc6\x82
"
,
"
\xf1\x83\x82\x82\xc7\x82\xc7\x83
"
},
{
MUA
,
0
,
"
\xc6\x82\xc6\x82
|
\xc7\x83\xc7\x83
|
\xc8\x84\xc8\x84
"
,
"
\xf1\x83\x82\x82\xc8\x84\xc8\x84
"
},
/* Greedy and non-greedy ? operators. */
{
MUA
,
0
,
"(?:a)?a"
,
"laab"
},
...
...
@@ -318,6 +322,14 @@ static struct regression_test_case regression_test_cases[] = {
{
CMUA
,
0
,
"[^
\xe1\xbd\xb8
][^
\xc3\xa9
]"
,
"
\xe1\xbd\xb8\xe1\xbf\xb8\xc3\xa9\xc3\x89
#"
},
{
MUA
,
0
,
"[^
\xe1\xbd\xb8
][^
\xc3\xa9
]"
,
"
\xe1\xbd\xb8\xe1\xbf\xb8\xc3\xa9\xc3\x89
#"
},
{
MUA
,
0
,
"[^
\xe1\xbd\xb8
]{3,}?"
,
"##
\xe1\xbd\xb8
#
\xe1\xbd\xb8
#
\xc3\x89
#
\xe1\xbd\xb8
"
},
{
MUA
,
0
,
"
\\
d+123"
,
"987654321,01234"
},
{
MUA
,
0
,
"abcd*|
\\
w+xy"
,
"aaaaa,abxyz"
},
{
MUA
,
0
,
"(?:abc|((?:amc|
\\
b
\\
w*xy)))"
,
"aaaaa,abxyz"
},
{
MUA
,
0
,
"a(?R)|([a-z]++)#"
,
".abcd.abcd#."
},
{
MUA
,
0
,
"a(?R)|([a-z]++)#"
,
".abcd.mbcd#."
},
{
MUA
,
0
,
".[ab]*."
,
"xx"
},
{
MUA
,
0
,
".[ab]*a"
,
"xxa"
},
{
MUA
,
0
,
".[ab]?."
,
"xx"
},
/* Bracket repeats with limit. */
{
MUA
,
0
,
"(?:(ab){2}){5}M"
,
"abababababababababababM"
},
...
...
@@ -574,6 +586,16 @@ static struct regression_test_case regression_test_cases[] = {
{
MUA
,
0
,
"(?:(?=.)??[a-c])+m"
,
"abacdcbacacdcaccam"
},
{
MUA
,
0
,
"((?!a)?(?!([^a]))?)+$"
,
"acbab"
},
{
MUA
,
0
,
"((?!a)?\?(?!([^a]))?\?)+$"
,
"acbab"
},
{
MUA
,
0
,
"a(?=(?C)
\\
B)b"
,
"ab"
},
{
MUA
,
0
,
"a(?!(?C)
\\
B)bb|ab"
,
"abb"
},
{
MUA
,
0
,
"a(?=
\\
b|(?C)
\\
B)b"
,
"ab"
},
{
MUA
,
0
,
"a(?!
\\
b|(?C)
\\
B)bb|ab"
,
"abb"
},
{
MUA
,
0
,
"c(?(?=(?C)
\\
B)ab|a)"
,
"cab"
},
{
MUA
,
0
,
"c(?(?!(?C)
\\
B)ab|a)"
,
"cab"
},
{
MUA
,
0
,
"c(?(?=
\\
b|(?C)
\\
B)ab|a)"
,
"cab"
},
{
MUA
,
0
,
"c(?(?!
\\
b|(?C)
\\
B)ab|a)"
,
"cab"
},
{
MUA
,
0
,
"a(?=)b"
,
"ab"
},
{
MUA
,
0
|
F_NOMATCH
,
"a(?!)b"
,
"ab"
},
/* Not empty, ACCEPT, FAIL */
{
MUA
|
PCRE_NOTEMPTY
,
0
|
F_NOMATCH
,
"a*"
,
"bcx"
},
...
...
@@ -664,6 +686,7 @@ static struct regression_test_case regression_test_cases[] = {
{
PCRE_MULTILINE
|
PCRE_UTF8
|
PCRE_NEWLINE_CRLF
|
PCRE_FIRSTLINE
,
1
,
"."
,
"
\r\n
"
},
{
PCRE_FIRSTLINE
|
PCRE_NEWLINE_LF
|
PCRE_DOTALL
,
0
|
F_NOMATCH
,
"ab."
,
"ab"
},
{
MUA
|
PCRE_FIRSTLINE
,
1
|
F_NOMATCH
,
"^[a-d0-9]"
,
"
\n
xx
\n
d"
},
{
PCRE_NEWLINE_ANY
|
PCRE_FIRSTLINE
|
PCRE_DOTALL
,
0
,
"....a"
,
"012
\n
0a"
},
/* Recurse. */
{
MUA
,
0
,
"(a)(?1)"
,
"aa"
},
...
...
@@ -798,6 +821,9 @@ static struct regression_test_case regression_test_cases[] = {
/* (*SKIP) verb. */
{
MUA
,
0
|
F_NOMATCH
,
"(?=a(*SKIP)b)ab|ad"
,
"ad"
},
{
MUA
,
0
,
"(
\\
w+(*SKIP)#)"
,
"abcd,xyz#,"
},
{
MUA
,
0
,
"
\\
w+(*SKIP)#|mm"
,
"abcd,xyz#,"
},
{
MUA
,
0
|
F_NOMATCH
,
"b+(?<=(*SKIP)#c)|b+"
,
"#bbb"
},
/* (*THEN) verb. */
{
MUA
,
0
,
"((?:a(*THEN)|aab)(*THEN)c|a+)+m"
,
"aabcaabcaabcaabcnacm"
},
...
...
@@ -1534,10 +1560,10 @@ static int regression_tests(void)
is_successful
=
0
;
}
#endif
#if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE
16
if
(
ovector16_1
[
i
]
!=
ovector16_2
[
i
]
||
ovector16_1
[
i
]
!=
ovector
16_1
[
i
]
||
ovector16_1
[
i
]
!=
ovector16
_2
[
i
])
{
printf
(
"
\n
16 and
16
bit: Ovector[%d] value differs(J16:%d,I16:%d,J32:%d,I32:%d): [%d] '%s' @ '%s'
\n
"
,
i
,
ovector16_1
[
i
],
ovector16_2
[
i
],
ovector
16_1
[
i
],
ovector16
_2
[
i
],
#if defined SUPPORT_PCRE16 && defined SUPPORT_PCRE
32
if
(
ovector16_1
[
i
]
!=
ovector16_2
[
i
]
||
ovector16_1
[
i
]
!=
ovector
32_1
[
i
]
||
ovector16_1
[
i
]
!=
ovector32
_2
[
i
])
{
printf
(
"
\n
16 and
32
bit: Ovector[%d] value differs(J16:%d,I16:%d,J32:%d,I32:%d): [%d] '%s' @ '%s'
\n
"
,
i
,
ovector16_1
[
i
],
ovector16_2
[
i
],
ovector
32_1
[
i
],
ovector32
_2
[
i
],
total
,
current
->
pattern
,
current
->
input
);
is_successful
=
0
;
}
...
...
pcre/pcre_study.c
View file @
b760a69e
...
...
@@ -1371,7 +1371,7 @@ do
for
(
c
=
0
;
c
<
16
;
c
++
)
start_bits
[
c
]
|=
map
[
c
];
for
(
c
=
128
;
c
<
256
;
c
++
)
{
if
((
map
[
c
/
8
]
&
&
(
1
<<
(
c
&
7
)))
!=
0
)
if
((
map
[
c
/
8
]
&
(
1
<<
(
c
&
7
)))
!=
0
)
{
int
d
=
(
c
>>
6
)
|
0xc0
;
/* Set bit for this starter */
start_bits
[
d
/
8
]
|=
(
1
<<
(
d
&
7
));
/* and then skip on to the */
...
...
pcre/pcrecpp.cc
View file @
b760a69e
...
...
@@ -66,7 +66,7 @@ Arg RE::no_arg((void*)NULL);
// inclusive test if we ever needed it. (Note that not only the
// __attribute__ syntax, but also __USER_LABEL_PREFIX__, are
// gnu-specific.)
#if defined(__GNUC__) && __GNUC__ >= 3 && defined(__ELF__)
#if defined(__GNUC__) && __GNUC__ >= 3 && defined(__ELF__)
&& !defined(__INTEL_COMPILER)
# define ULP_AS_STRING(x) ULP_AS_STRING_INTERNAL(x)
# define ULP_AS_STRING_INTERNAL(x) #x
# define USER_LABEL_PREFIX_STR ULP_AS_STRING(__USER_LABEL_PREFIX__)
...
...
@@ -168,22 +168,22 @@ bool RE::FullMatch(const StringPiece& text,
const
Arg
&
ptr16
)
const
{
const
Arg
*
args
[
kMaxArgs
];
int
n
=
0
;
if
(
&
ptr1
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr16
;
if
(
&
ptr1
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr16
;
done:
int
consumed
;
...
...
@@ -210,22 +210,22 @@ bool RE::PartialMatch(const StringPiece& text,
const
Arg
&
ptr16
)
const
{
const
Arg
*
args
[
kMaxArgs
];
int
n
=
0
;
if
(
&
ptr1
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr16
;
if
(
&
ptr1
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr16
;
done:
int
consumed
;
...
...
@@ -252,22 +252,22 @@ bool RE::Consume(StringPiece* input,
const
Arg
&
ptr16
)
const
{
const
Arg
*
args
[
kMaxArgs
];
int
n
=
0
;
if
(
&
ptr1
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr16
;
if
(
&
ptr1
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr16
;
done:
int
consumed
;
...
...
@@ -300,22 +300,22 @@ bool RE::FindAndConsume(StringPiece* input,
const
Arg
&
ptr16
)
const
{
const
Arg
*
args
[
kMaxArgs
];
int
n
=
0
;
if
(
&
ptr1
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
goto
done
;
args
[
n
++
]
=
&
ptr16
;
if
(
&
ptr1
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr1
;
if
(
&
ptr2
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr2
;
if
(
&
ptr3
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr3
;
if
(
&
ptr4
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr4
;
if
(
&
ptr5
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr5
;
if
(
&
ptr6
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr6
;
if
(
&
ptr7
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr7
;
if
(
&
ptr8
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr8
;
if
(
&
ptr9
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr9
;
if
(
&
ptr10
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr10
;
if
(
&
ptr11
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr11
;
if
(
&
ptr12
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr12
;
if
(
&
ptr13
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr13
;
if
(
&
ptr14
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr14
;
if
(
&
ptr15
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr15
;
if
(
&
ptr16
==
&
no_arg
)
{
goto
done
;
}
args
[
n
++
]
=
&
ptr16
;
done:
int
consumed
;
...
...
pcre/pcregrep.c
View file @
b760a69e
...
...
@@ -2437,7 +2437,7 @@ return options;
static
char
*
ordin
(
int
n
)
{
static
char
buffer
[
8
];
static
char
buffer
[
14
];
char
*
p
=
buffer
;
sprintf
(
p
,
"%d"
,
n
);
while
(
*
p
!=
0
)
p
++
;
...
...
pcre/pcreposix.c
View file @
b760a69e
...
...
@@ -6,7 +6,7 @@
and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Copyright (c) 1997-201
4
University of Cambridge
Copyright (c) 1997-201
6
University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
...
...
@@ -173,7 +173,8 @@ static const int eint[] = {
REG_BADPAT
,
/* group name must start with a non-digit */
/* 85 */
REG_BADPAT
,
/* parentheses too deeply nested (stack check) */
REG_BADPAT
/* missing digits in \x{} or \o{} */
REG_BADPAT
,
/* missing digits in \x{} or \o{} */
REG_BADPAT
/* pattern too complicated */
};
/* Table of texts corresponding to POSIX error codes */
...
...
@@ -364,6 +365,7 @@ start location rather than being passed as a PCRE "starting offset". */
if
((
eflags
&
REG_STARTEND
)
!=
0
)
{
if
(
pmatch
==
NULL
)
return
REG_INVARG
;
so
=
pmatch
[
0
].
rm_so
;
eo
=
pmatch
[
0
].
rm_eo
;
}
...
...
pcre/pcretest.c
View file @
b760a69e
...
...
@@ -2250,7 +2250,7 @@ data is not zero. */
static
int
callout
(
pcre_callout_block
*
cb
)
{
FILE
*
f
=
(
first_callout
|
callout_extra
)
?
outfile
:
NULL
;
int
i
,
pre_start
,
post_start
,
subject_length
;
int
i
,
current_position
,
pre_start
,
post_start
,
subject_length
;
if
(
callout_extra
)
{
...
...
@@ -2280,14 +2280,19 @@ printed lengths of the substrings. */
if
(
f
!=
NULL
)
fprintf
(
f
,
"--->"
);
/* If a lookbehind is involved, the current position may be earlier than the
match start. If so, use the match start instead. */
current_position
=
(
cb
->
current_position
>=
cb
->
start_match
)
?
cb
->
current_position
:
cb
->
start_match
;
PCHARS
(
pre_start
,
cb
->
subject
,
0
,
cb
->
start_match
,
f
);
PCHARS
(
post_start
,
cb
->
subject
,
cb
->
start_match
,
c
b
->
c
urrent_position
-
cb
->
start_match
,
f
);
current_position
-
cb
->
start_match
,
f
);
PCHARS
(
subject_length
,
cb
->
subject
,
0
,
cb
->
subject_length
,
NULL
);
PCHARSV
(
cb
->
subject
,
cb
->
current_position
,
cb
->
subject_length
-
cb
->
current_position
,
f
);
PCHARSV
(
cb
->
subject
,
current_position
,
cb
->
subject_length
-
current_position
,
f
);
if
(
f
!=
NULL
)
fprintf
(
f
,
"
\n
"
);
...
...
@@ -5612,6 +5617,12 @@ while (!done)
break
;
}
if
(
use_size_offsets
<
2
)
{
fprintf
(
outfile
,
"Cannot do global matching with an ovector size < 2
\n
"
);
break
;
}
/* If we have matched an empty string, first check to see if we are at
the end of the subject. If so, the /g loop is over. Otherwise, mimic what
Perl's /g options does. This turns out to be rather cunning. First we set
...
...
@@ -5740,3 +5751,4 @@ return yield;
}
/* End of pcretest.c */
pcre/testdata/testinput11
View file @
b760a69e
...
...
@@ -138,4 +138,6 @@ is required for these tests. --/
/.((?2)(?R)\1)()/B
/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
/-- End of testinput11 --/
pcre/testdata/testinput2
View file @
b760a69e
...
...
@@ -4217,4 +4217,30 @@ backtracking verbs. --/
/a[[:punct:]b]/BZ
/L(?#(|++<!(2)?/BZ
/L(?#(|++<!(2)?/BOZ
/L(?#(|++<!(2)?/BCZ
/L(?#(|++<!(2)?/BCOZ
/(A*)\E+/CBZ
/()\Q\E*]/BCZ
/(?<A>)(?J:(?<B>)(?<B>))(?<C>)/
\O\CC
/(?=a\K)/
ring bpattingbobnd $ 1,oern cou \rb\L
/(?<=((?C)0))/
9010
abcd
/((?J)(?'R'(?'R'(?'R'(?'R'(?'R'(?|(\k'R'))))))))/
/\N(?(?C)0?!.)*/
/-- End of testinput2 --/
pcre/testdata/testinput6
View file @
b760a69e
...
...
@@ -1553,4 +1553,13 @@
\x{200}
\x{37e}
/[^[:^ascii:]\d]/8W
a
~
0
\a
\x{7f}
\x{389}
\x{20ac}
/-- End of testinput6 --/
pcre/testdata/testinput7
View file @
b760a69e
...
...
@@ -853,4 +853,8 @@ of case for anything other than the ASCII letters. --/
/a[b[:punct:]]/8WBZ
/L(?#(|++<!(2)?/B8COZ
/L(?#(|++<!(2)?/B8WCZ
/-- End of testinput7 --/
pcre/testdata/testoutput11-16
View file @
b760a69e
...
...
@@ -231,7 +231,7 @@ Memory allocation (code space): 73
------------------------------------------------------------------
/(?P<a>a)...(?P=a)bbb(?P>a)d/BM
Memory allocation (code space):
77
Memory allocation (code space):
93
------------------------------------------------------------------
0 24 Bra
2 5 CBra 1
...
...
@@ -765,4 +765,7 @@ Memory allocation (code space): 14
25 End
------------------------------------------------------------------
/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
Failed: regular expression is too complicated at offset 490
/-- End of testinput11 --/
pcre/testdata/testoutput11-32
View file @
b760a69e
...
...
@@ -231,7 +231,7 @@ Memory allocation (code space): 155
------------------------------------------------------------------
/(?P<a>a)...(?P=a)bbb(?P>a)d/BM
Memory allocation (code space): 1
57
Memory allocation (code space): 1
89
------------------------------------------------------------------
0 24 Bra
2 5 CBra 1
...
...
@@ -765,4 +765,7 @@ Memory allocation (code space): 28
25 End
------------------------------------------------------------------
/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
Failed: missing ) at offset 509
/-- End of testinput11 --/
pcre/testdata/testoutput11-8
View file @
b760a69e
...
...
@@ -231,7 +231,7 @@ Memory allocation (code space): 45
------------------------------------------------------------------
/(?P<a>a)...(?P=a)bbb(?P>a)d/BM
Memory allocation (code space):
50
Memory allocation (code space):
62
------------------------------------------------------------------
0 30 Bra
3 7 CBra 1
...
...
@@ -765,4 +765,7 @@ Memory allocation (code space): 10
38 End
------------------------------------------------------------------
/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/
Failed: missing ) at offset 509
/-- End of testinput11 --/
pcre/testdata/testoutput2
View file @
b760a69e
...
...
@@ -419,7 +419,7 @@ Need char = '>'
/(?U)<.*>/I
Capturing subpattern count = 0
Options: ungreedy
No options
First char = '<'
Need char = '>'
abc<def>ghi<klm>nop
...
...
@@ -443,7 +443,7 @@ Need char = '='
/(?U)={3,}?/I
Capturing subpattern count = 0
Options: ungreedy
No options
First char = '='
Need char = '='
abc========def
...
...
@@ -477,7 +477,7 @@ Failed: lookbehind assertion is not fixed length at offset 12
/(?i)abc/I
Capturing subpattern count = 0
Options: caseles
s
No option
s
First char = 'a' (caseless)
Need char = 'c' (caseless)
...
...
@@ -489,7 +489,7 @@ No need char
/(?i)^1234/I
Capturing subpattern count = 0
Options: anchored
caseless
Options: anchored
No first char
No need char
...
...
@@ -502,7 +502,7 @@ No need char
/(?s).*/I
Capturing subpattern count = 0
May match empty string
Options: anchored
dotall
Options: anchored
No first char
No need char
...
...
@@ -516,7 +516,7 @@ Starting chars: a b c d
/(?i)[abcd]/IS
Capturing subpattern count = 0
Options: caseles
s
No option
s
No first char
No need char
Subject length lower bound = 1
...
...
@@ -524,7 +524,7 @@ Starting chars: A B C D a b c d
/(?m)[xy]|(b|c)/IS
Capturing subpattern count = 1
Options: multiline
No options
No first char
No need char
Subject length lower bound = 1
...
...
@@ -538,7 +538,7 @@ No need char
/(?i)(^a|^b)/Im
Capturing subpattern count = 1
Options:
caseless
multiline
Options: multiline
First char at start or follows newline
No need char
...
...
@@ -555,13 +555,13 @@ Failed: malformed number or name after (?( at offset 4
Failed: malformed number or name after (?( at offset 4
/(?(?i))/
Failed: assertion expected after (?( at offset 3
Failed: assertion expected after (?(
or (?(?C)
at offset 3
/(?(abc))/
Failed: reference to non-existent subpattern at offset 7
/(?(?<ab))/
Failed: assertion expected after (?( at offset 3
Failed: assertion expected after (?(
or (?(?C)
at offset 3
/((?s)blah)\s+\1/I
Capturing subpattern count = 1
...
...
@@ -1179,7 +1179,7 @@ No need char
End
------------------------------------------------------------------
Capturing subpattern count = 1
Options: anchored
dotall
Options: anchored
No first char
No need char
...
...
@@ -2735,7 +2735,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
caseless
extended
Options: extended
First char = 'a' (caseless)
Need char = 'c' (caseless)
...
...
@@ -2748,7 +2748,7 @@ Need char = 'c' (caseless)
End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
caseless
extended
Options: extended
First char = 'a' (caseless)
Need char = 'c' (caseless)
...
...
@@ -3095,7 +3095,7 @@ Need char = 'b'
End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: ungreedy
No options
First char = 'x'
Need char = 'b'
xaaaab
...
...
@@ -3497,7 +3497,7 @@ Need char = 'c'
/(?i)[ab]/IS
Capturing subpattern count = 0
Options: caseles
s
No option
s
No first char
No need char
Subject length lower bound = 1
...
...
@@ -6299,7 +6299,7 @@ Capturing subpattern count = 3
Named capturing subpatterns:
A 2
A 3
Options: anchored
dupnames
Options: anchored
Duplicate name status changes
No first char
No need char
...
...
@@ -7870,7 +7870,7 @@ No match
Failed: malformed number or name after (?( at offset 6
/(?(''))/
Failed: assertion expected after (?( at offset 4
Failed: assertion expected after (?(
or (?(?C)
at offset 4
/(?('R')stuff)/
Failed: reference to non-existent subpattern at offset 7
...
...
@@ -14346,7 +14346,7 @@ No match
"((?2)+)((?1))"
"(?(?<E>.*!.*)?)"
Failed: assertion expected after (?( at offset 3
Failed: assertion expected after (?(
or (?(?C)
at offset 3
"X((?2)()*+){2}+"BZ
------------------------------------------------------------------
...
...
@@ -14574,4 +14574,100 @@ No match
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/BZ
------------------------------------------------------------------
Bra
L?+
Ket
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/BOZ
------------------------------------------------------------------
Bra
L?
Ket
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/BCZ
------------------------------------------------------------------
Bra
Callout 255 0 14
L?+
Callout 255 14 0
Ket
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/BCOZ
------------------------------------------------------------------
Bra
Callout 255 0 14
L?
Callout 255 14 0
Ket
End
------------------------------------------------------------------
/(A*)\E+/CBZ
------------------------------------------------------------------
Bra
Callout 255 0 7
SCBra 1
Callout 255 1 2
A*
Callout 255 3 0
KetRmax
Callout 255 7 0
Ket
End
------------------------------------------------------------------
/()\Q\E*]/BCZ
------------------------------------------------------------------
Bra
Callout 255 0 7
Brazero
SCBra 1
Callout 255 1 0
KetRmax
Callout 255 7 1
]
Callout 255 8 0
Ket
End
------------------------------------------------------------------
/(?<A>)(?J:(?<B>)(?<B>))(?<C>)/
\O\CC
Matched, but too many substrings
copy substring C failed -7
/(?=a\K)/
ring bpattingbobnd $ 1,oern cou \rb\L
Start of matched string is beyond its end - displaying from end to start.
0: a
0L
/(?<=((?C)0))/
9010
--->9010
0 ^ 0
0 ^ 0
0:
1: 0
abcd
--->abcd
0 ^ 0
0 ^ 0
0 ^ 0
0 ^ 0
No match
/((?J)(?'R'(?'R'(?'R'(?'R'(?'R'(?|(\k'R'))))))))/
/\N(?(?C)0?!.)*/
Failed: assertion expected after (?( or (?(?C) at offset 4
/-- End of testinput2 --/
pcre/testdata/testoutput6
View file @
b760a69e
...
...
@@ -2557,4 +2557,20 @@ No match
\x{37e}
0: \x{37e}
/[^[:^ascii:]\d]/8W
a
0: a
~
0: ~
0
No match
\a
0: \x{07}
\x{7f}
0: \x{7f}
\x{389}
No match
\x{20ac}
No match
/-- End of testinput6 --/
pcre/testdata/testoutput7
View file @
b760a69e
...
...
@@ -2348,4 +2348,24 @@ No match
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/B8COZ
------------------------------------------------------------------
Bra
Callout 255 0 14
L?
Callout 255 14 0
Ket
End
------------------------------------------------------------------
/L(?#(|++<!(2)?/B8WCZ
------------------------------------------------------------------
Bra
Callout 255 0 14
L?+
Callout 255 14 0
Ket
End
------------------------------------------------------------------
/-- End of testinput7 --/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment