github的一些开源项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

316 lines
22 KiB

  1. # This test is run only when JIT support is available. It checks JIT complete
  2. # and partial modes, and things that are different with JIT.
  3. #pattern jitverify
  4. # JIT does not support this pattern (callout at start of condition).
  5. /(?(?C1)(?=a)a)/I
  6. # The following pattern cannot be compiled by JIT.
  7. /b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*
  8. # Check that an infinite recursion loop is caught.
  9. /(?(R)a*(?1)|((?R))b)/
  10. aaaabcde
  11. /abcd/I
  12. abcd
  13. \= Expect no match
  14. xyz
  15. /(*NO_JIT)abcd/I
  16. abcd
  17. \= Expect no match
  18. xyz
  19. /abcd/
  20. abcd
  21. ab\=ps
  22. ab\=ph
  23. \= Expect no match
  24. xyz
  25. /abcd/jitfast
  26. abcd
  27. ab\=ps
  28. ab\=ph
  29. \= Expect no match
  30. xyz
  31. /abcd/jit=1
  32. abcd
  33. ab\=ps
  34. ab\=ph
  35. \= Expect no match
  36. xyz
  37. xyz\=ps
  38. /abcd/jit=1,jitfast
  39. abcd
  40. ab\=ps
  41. ab\=ph
  42. xyz\=ps
  43. \= Expect no match
  44. xyz
  45. /abcd/jit=2
  46. abcd
  47. ab\=ps
  48. ab\=ph
  49. \= Expect no match
  50. xyz
  51. /abcd/jit=2,jitfast
  52. abcd
  53. ab\=ps
  54. ab\=ph
  55. xyz
  56. /abcd/jit=3
  57. abcd
  58. ab\=ps
  59. ab\=ph
  60. \= Expect no match
  61. xyz
  62. /abcd/jit=4
  63. abcd
  64. ab\=ps
  65. ab\=ph
  66. \= Expect no match
  67. xyz
  68. /abcd/jit=5
  69. abcd
  70. ab\=ps
  71. ab\=ph
  72. \= Expect no match
  73. xyz
  74. /abcd/jit=6
  75. abcd
  76. ab\=ps
  77. ab\=ph
  78. \= Expect no match
  79. xyz
  80. /abcd/jit=7
  81. abcd
  82. ab\=ps
  83. ab\=ph
  84. \= Expect no match
  85. xyz
  86. /abcd/I,jit=2
  87. /(*NO_START_OPT)a(*:m)b/mark
  88. \= Expect no match
  89. a
  90. /^12345678abcd/m
  91. 12345678abcd
  92. # Limits tests that give different output with JIT.
  93. /(a+)*zz/I
  94. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
  95. \= Expect no match
  96. aaaaaaaaaaaaaz\=find_limits
  97. !((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
  98. /* this is a C style comment */\=find_limits
  99. /^(?>a)++/
  100. aa\=find_limits
  101. aaaaaaaaa\=find_limits
  102. /(a)(?1)++/
  103. aa\=find_limits
  104. aaaaaaaaa\=find_limits
  105. /a(?:.)*?a/ims
  106. abbbbbbbbbbbbbbbbbbbbba\=find_limits
  107. /a(?:.(*THEN))*?a/ims
  108. abbbbbbbbbbbbbbbbbbbbba\=find_limits
  109. /a(?:.(*THEN:ABC))*?a/ims
  110. abbbbbbbbbbbbbbbbbbbbba\=find_limits
  111. /^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
  112. aabbccddee\=find_limits
  113. /^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
  114. aabbccddee\=find_limits
  115. /^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
  116. aabbccddee\=find_limits
  117. /^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
  118. aabbccddee\=find_limits
  119. aabbccddee\=jitstack=1
  120. /(a+)*zz/
  121. \= Expect no match
  122. aaaaaaaaaaaaaz
  123. \= Expect limit exceeded
  124. aaaaaaaaaaaaaz\=match_limit=3000
  125. /(*LIMIT_MATCH=3000)(a+)*zz/I
  126. \= Expect limit exceeded
  127. aaaaaaaaaaaaaz
  128. \= Expect limit exceeded
  129. aaaaaaaaaaaaaz\=match_limit=60000
  130. /(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
  131. \= Expect limit exceeded
  132. aaaaaaaaaaaaaz
  133. /(*LIMIT_MATCH=60000)(a+)*zz/I
  134. \= Expect no match
  135. aaaaaaaaaaaaaz
  136. \= Expect limit exceeded
  137. aaaaaaaaaaaaaz\=match_limit=3000
  138. # These three have infinitely nested recursions.
  139. /((?2))((?1))/
  140. \= Expect JIT stack limit reached
  141. abc
  142. /((?(R2)a+|(?1)b))()/
  143. \= Expect JIT stack limit reached
  144. aaaabcde
  145. /(?(R)a*(?1)|((?R))b)/
  146. \= Expect JIT stack limit reached
  147. aaaabcde
  148. # Invalid options disable JIT when called via pcre2_match(), causing the
  149. # match to happen via the interpreter, but for fast JIT invalid options are
  150. # ignored, so an unanchored match happens.
  151. /abcd/
  152. abcd\=anchored
  153. \= Expect no match
  154. fail abcd\=anchored
  155. /abcd/jitfast
  156. abcd\=anchored
  157. succeed abcd\=anchored
  158. # Push/pop does not lose the JIT information, though jitverify applies only to
  159. # compilation, but serializing (save/load) discards JIT data completely.
  160. /^abc\Kdef/info,push
  161. #pop jitverify
  162. abcdef
  163. /^abc\Kdef/info,push
  164. #save testsaved1
  165. #load testsaved1
  166. #pop jitverify
  167. abcdef
  168. #load testsaved1
  169. #pop jit,jitverify
  170. abcdef
  171. /abcd/pushcopy,jitverify
  172. abcd
  173. #pop jitverify
  174. abcd
  175. # Test pattern compilation
  176. /(?:a|b|c|d|e)(?R)/jit=1
  177. /(?:a|b|c|d|e)(?R)(?R)/jit=1
  178. /(a(?:a|b|c|d|e)b){8,16}/jit=1
  179. /(?:|a|){100}x/jit=1
  180. # These tests provoke recursion loops, which give a different error message
  181. # when JIT is used.
  182. /(?R)/I
  183. abcd
  184. /(a|(?R))/I
  185. abcd
  186. defg
  187. /(ab|(bc|(de|(?R))))/I
  188. abcd
  189. fghi
  190. /(ab|(bc|(de|(?1))))/I
  191. abcd
  192. fghi
  193. /x(ab|(bc|(de|(?1)x)x)x)/I
  194. xab123
  195. xfghi
  196. /(?!\w)(?R)/
  197. abcd
  198. =abc
  199. /(?=\w)(?R)/
  200. =abc
  201. abcd
  202. /(?<!\w)(?R)/
  203. abcd
  204. /(?<=\w)(?R)/
  205. abcd
  206. /(a+|(?R)b)/
  207. aaa
  208. bbb
  209. /[^\xff]((?1))/BI
  210. abcd
  211. /(x(?1)){4}/
  212. /[axm]{7}/
  213. /(.|.)*?bx/
  214. \= Expect limit exceeded
  215. aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\=match_limit=10000000
  216. # Test JIT disable
  217. /abc/
  218. abc
  219. abc\=no_jit
  220. /abc/jitfast
  221. abc
  222. abc\=no_jit
  223. # ----
  224. /[aC]/mg,firstline,newline=lf
  225. match\nmatch
  226. /[aCz]/mg,firstline,newline=lf
  227. match\nmatch
  228. //jit
  229. \=null_subject
  230. /(.)(.)/jitfast,replace=$2+$1
  231. ABCD
  232. /(...)-(...)/jitfast
  233. abc-xyz\=get=2
  234. # End of testinput17