pcre2/testdata/testinput17

311 lines
22 KiB
Plaintext
Raw Normal View History

# This test is run only when JIT support is available. It checks JIT complete
# and partial modes, and things that are different with JIT.
#pattern jitverify
# JIT does not support this pattern (callout at start of condition).
/(?(?C1)(?=a)a)/I
# The following pattern cannot be compiled by JIT.
/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*
# Check that an infinite recursion loop is caught.
/(?(R)a*(?1)|((?R))b)/
aaaabcde
/abcd/I
abcd
\= Expect no match
xyz
/(*NO_JIT)abcd/I
abcd
\= Expect no match
xyz
/abcd/
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jitfast
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=1
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
xyz\=ps
/abcd/jit=1,jitfast
abcd
ab\=ps
ab\=ph
xyz\=ps
\= Expect no match
xyz
/abcd/jit=2
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=2,jitfast
abcd
ab\=ps
ab\=ph
xyz
/abcd/jit=3
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=4
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=5
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=6
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/jit=7
abcd
ab\=ps
ab\=ph
\= Expect no match
xyz
/abcd/I,jit=2
/(*NO_START_OPT)a(*:m)b/mark
\= Expect no match
a
/^12345678abcd/m
12345678abcd
2014-08-08 20:18:18 +02:00
# Limits tests that give different output with JIT.
2014-08-08 20:18:18 +02:00
/(a+)*zz/I
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
\= Expect no match
aaaaaaaaaaaaaz\=find_limits
!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
/* this is a C style comment */\=find_limits
/^(?>a)++/
aa\=find_limits
aaaaaaaaa\=find_limits
/(a)(?1)++/
aa\=find_limits
aaaaaaaaa\=find_limits
/a(?:.)*?a/ims
abbbbbbbbbbbbbbbbbbbbba\=find_limits
/a(?:.(*THEN))*?a/ims
abbbbbbbbbbbbbbbbbbbbba\=find_limits
/a(?:.(*THEN:ABC))*?a/ims
abbbbbbbbbbbbbbbbbbbbba\=find_limits
/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
aabbccddee\=find_limits
/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
aabbccddee\=find_limits
/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
aabbccddee\=find_limits
/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
aabbccddee\=find_limits
aabbccddee\=jitstack=1
/(a+)*zz/
\= Expect no match
aaaaaaaaaaaaaz
\= Expect limit exceeded
aaaaaaaaaaaaaz\=match_limit=3000
/(*LIMIT_MATCH=3000)(a+)*zz/I
\= Expect limit exceeded
aaaaaaaaaaaaaz
\= Expect limit exceeded
aaaaaaaaaaaaaz\=match_limit=60000
/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
\= Expect limit exceeded
aaaaaaaaaaaaaz
/(*LIMIT_MATCH=60000)(a+)*zz/I
\= Expect no match
aaaaaaaaaaaaaz
\= Expect limit exceeded
aaaaaaaaaaaaaz\=match_limit=3000
# These three have infinitely nested recursions.
/((?2))((?1))/
\= Expect JIT stack limit reached
2014-10-06 19:28:42 +02:00
abc
2014-08-08 20:18:18 +02:00
/((?(R2)a+|(?1)b))()/
\= Expect JIT stack limit reached
aaaabcde
/(?(R)a*(?1)|((?R))b)/
\= Expect JIT stack limit reached
aaaabcde
# Invalid options disable JIT when called via pcre2_match(), causing the
# match to happen via the interpreter, but for fast JIT invalid options are
# ignored, so an unanchored match happens.
/abcd/
abcd\=anchored
\= Expect no match
fail abcd\=anchored
/abcd/jitfast
abcd\=anchored
succeed abcd\=anchored
# Push/pop does not lose the JIT information, though jitverify applies only to
# compilation, but serializing (save/load) discards JIT data completely.
/^abc\Kdef/info,push
#pop jitverify
2014-10-06 19:28:42 +02:00
abcdef
2014-08-08 20:18:18 +02:00
/^abc\Kdef/info,push
#save testsaved1
#load testsaved1
#pop jitverify
abcdef
#load testsaved1
#pop jit,jitverify
abcdef
2016-02-26 19:26:17 +01:00
/abcd/pushcopy,jitverify
abcd
#pop jitverify
abcd
# Test pattern compilation
2014-10-06 19:28:42 +02:00
/(?:a|b|c|d|e)(?R)/jit=1
2014-10-06 19:28:42 +02:00
/(?:a|b|c|d|e)(?R)(?R)/jit=1
2014-10-06 19:28:42 +02:00
/(a(?:a|b|c|d|e)b){8,16}/jit=1
2014-10-06 19:28:42 +02:00
/(?:|a|){100}x/jit=1
2014-10-06 19:28:42 +02:00
# These tests provoke recursion loops, which give a different error message
# when JIT is used.
2014-10-06 19:28:42 +02:00
/(?R)/I
abcd
2014-10-06 19:28:42 +02:00
/(a|(?R))/I
abcd
defg
2014-10-06 19:28:42 +02:00
/(ab|(bc|(de|(?R))))/I
abcd
fghi
2014-10-06 19:28:42 +02:00
/(ab|(bc|(de|(?1))))/I
abcd
fghi
2014-10-06 19:28:42 +02:00
/x(ab|(bc|(de|(?1)x)x)x)/I
xab123
xfghi
2014-10-06 19:28:42 +02:00
/(?!\w)(?R)/
abcd
=abc
2014-10-06 19:28:42 +02:00
/(?=\w)(?R)/
=abc
abcd
2014-10-06 19:28:42 +02:00
/(?<!\w)(?R)/
abcd
2014-10-06 19:28:42 +02:00
/(?<=\w)(?R)/
abcd
2014-10-06 19:28:42 +02:00
/(a+|(?R)b)/
aaa
bbb
2014-10-06 19:28:42 +02:00
/[^\xff]((?1))/BI
abcd
2015-03-20 13:37:28 +01:00
/(x(?1)){4}/
2015-09-02 10:35:50 +02:00
/[axm]{7}/
/(.|.)*?bx/
\= Expect limit exceeded
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\=match_limit=10000000
# Test JIT disable
/abc/
abc
abc\=no_jit
/abc/jitfast
abc
abc\=no_jit
2016-07-02 17:52:30 +02:00
# ----
2016-07-06 19:39:15 +02:00
/[aC]/mg,firstline,newline=lf
2018-10-17 10:33:38 +02:00
match\nmatch
2016-07-02 17:52:30 +02:00
2016-07-06 19:39:15 +02:00
/[aCz]/mg,firstline,newline=lf
2018-10-17 10:33:38 +02:00
match\nmatch
2015-09-02 10:35:50 +02:00
//jitfast
\=null_subject
# End of testinput17