/
niceSOFT
/
pcre2
Обзор
Документация
Войти
/
niceSOFT
/
pcre2
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
testdata/testinput17
349 строк
23 KB
Nicholas Wilson
Add a testcase for #926 (#940)
12 авг 2026, 12:18
Не верифицирован
12 авг 2026, 12:18
e2f1001
Код
Авторство
О чём код?
# 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 … [Строка слишком длинная. Вы можете скачать файл] # 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 # Limits tests that give different output with JIT. /(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 abc /((?(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 abcdef /^abc\Kdef/info,push #save testsaved1 #load testsaved1 #pop jitverify abcdef #load testsaved1 #pop jit,jitverify abcdef /abcd/pushcopy,jitverify abcd #pop jitverify abcd # Test pattern compilation /(?:a|b|c|d|e)(?R)/jit=1 /(?:a|b|c|d|e)(?R)(?R)/jit=1 /(a(?:a|b|c|d|e)b){8,16}/jit=1 /(?:|a|){100}x/jit=1 # These tests provoke recursion loops, which give a different error message # when JIT is used. /(?R)/I abcd /(a|(?R))/I abcd defg /(ab|(bc|(de|(?R))))/I abcd fghi /(ab|(bc|(de|(?1))))/I abcd fghi /x(ab|(bc|(de|(?1)x)x)x)/I xab123 xfghi /(?!\w)(?R)/ abcd =abc /(?=\w)(?R)/ =abc abcd /(?<!\w)(?R)/ abcd /(?<=\w)(?R)/ abcd /(a+|(?R)b)/ aaa bbb #if !ebcdic /[^\xff]((?1))/BI abcd #endif /(x(?1)){4}/ /[axm]{7}/ /(.|.)*?bx/ \= Expect limit exceeded aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\=match_limit=10000000 # Test JIT disable /abc/ abc abc\=no_jit /abc/jitfast abc abc\=copy_matched_subject abc\=no_jit # ---- /[aC]/mg,firstline,newline=lf match\nmatch /[aCz]/mg,firstline,newline=lf match\nmatch //jit \=null_subject /(.)(.)/jitfast,replace=$2+$1 ABCD /(...)-(...)/jitfast abc-xyz\=get=2 # Check the JIT sets all the correct match state for pcre2_substitute /abc/jitfast,replace=yy zabcz zabcz\=substitute_matched /abc/jitfast,replace=yy zABCz zABCz\=substitute_matched /abc/jitfast ab\=replace=yy,partial_hard ab\=replace=yy,partial_hard,substitute_matched /(?C1)abc/jitfast,replace=yy zabcz\=callout_error=1 zabcz\=callout_error=1,substitute_matched # Check UTF validation when falling back from a partially-compiled JIT pattern # to the interpreter #if unicode /\b/B,utf,ucp,jit=1 \xff\x00\x00\=offset=2,ps #endif # End of testinput17