bug45923.phpt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. --TEST--
  2. Bug #45923 (mb_st[r]ripos() offset not handled correctly)
  3. --EXTENSIONS--
  4. mbstring
  5. --FILE--
  6. <?php
  7. function section($func, $haystack, $needle)
  8. {
  9. echo "\n------- $func -----------\n\n";
  10. foreach([0, 3, 6, 9, 11, 12, -1, -3, -6, -20] as $offset) {
  11. echo "> Offset: $offset\n";
  12. try {
  13. var_dump($func($haystack, $needle, $offset));
  14. } catch (\ValueError $e) {
  15. echo $e->getMessage() . \PHP_EOL;
  16. }
  17. }
  18. }
  19. section('strpos' , "abc abc abc" , "abc");
  20. section('mb_strpos' , "●○◆ ●○◆ ●○◆", "●○◆");
  21. section('stripos' , "abc abc abc" , "abc");
  22. section('mb_stripos' , "●○◆ ●○◆ ●○◆", "●○◆");
  23. section('strrpos' , "abc abc abc" , "abc");
  24. section('mb_strrpos' , "●○◆ ●○◆ ●○◆", "●○◆");
  25. section('strripos' , "abc abc abc" , "abc");
  26. section('mb_strripos', "●○◆ ●○◆ ●○◆", "●○◆");
  27. ?>
  28. --EXPECT--
  29. ------- strpos -----------
  30. > Offset: 0
  31. int(0)
  32. > Offset: 3
  33. int(4)
  34. > Offset: 6
  35. int(8)
  36. > Offset: 9
  37. bool(false)
  38. > Offset: 11
  39. bool(false)
  40. > Offset: 12
  41. strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  42. > Offset: -1
  43. bool(false)
  44. > Offset: -3
  45. int(8)
  46. > Offset: -6
  47. int(8)
  48. > Offset: -20
  49. strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  50. ------- mb_strpos -----------
  51. > Offset: 0
  52. int(0)
  53. > Offset: 3
  54. int(4)
  55. > Offset: 6
  56. int(8)
  57. > Offset: 9
  58. bool(false)
  59. > Offset: 11
  60. bool(false)
  61. > Offset: 12
  62. mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  63. > Offset: -1
  64. bool(false)
  65. > Offset: -3
  66. int(8)
  67. > Offset: -6
  68. int(8)
  69. > Offset: -20
  70. mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  71. ------- stripos -----------
  72. > Offset: 0
  73. int(0)
  74. > Offset: 3
  75. int(4)
  76. > Offset: 6
  77. int(8)
  78. > Offset: 9
  79. bool(false)
  80. > Offset: 11
  81. bool(false)
  82. > Offset: 12
  83. stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  84. > Offset: -1
  85. bool(false)
  86. > Offset: -3
  87. int(8)
  88. > Offset: -6
  89. int(8)
  90. > Offset: -20
  91. stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  92. ------- mb_stripos -----------
  93. > Offset: 0
  94. int(0)
  95. > Offset: 3
  96. int(4)
  97. > Offset: 6
  98. int(8)
  99. > Offset: 9
  100. bool(false)
  101. > Offset: 11
  102. bool(false)
  103. > Offset: 12
  104. mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  105. > Offset: -1
  106. bool(false)
  107. > Offset: -3
  108. int(8)
  109. > Offset: -6
  110. int(8)
  111. > Offset: -20
  112. mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  113. ------- strrpos -----------
  114. > Offset: 0
  115. int(8)
  116. > Offset: 3
  117. int(8)
  118. > Offset: 6
  119. int(8)
  120. > Offset: 9
  121. bool(false)
  122. > Offset: 11
  123. bool(false)
  124. > Offset: 12
  125. strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  126. > Offset: -1
  127. int(8)
  128. > Offset: -3
  129. int(8)
  130. > Offset: -6
  131. int(4)
  132. > Offset: -20
  133. strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  134. ------- mb_strrpos -----------
  135. > Offset: 0
  136. int(8)
  137. > Offset: 3
  138. int(8)
  139. > Offset: 6
  140. int(8)
  141. > Offset: 9
  142. bool(false)
  143. > Offset: 11
  144. bool(false)
  145. > Offset: 12
  146. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  147. > Offset: -1
  148. int(8)
  149. > Offset: -3
  150. int(8)
  151. > Offset: -6
  152. int(4)
  153. > Offset: -20
  154. mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  155. ------- strripos -----------
  156. > Offset: 0
  157. int(8)
  158. > Offset: 3
  159. int(8)
  160. > Offset: 6
  161. int(8)
  162. > Offset: 9
  163. bool(false)
  164. > Offset: 11
  165. bool(false)
  166. > Offset: 12
  167. strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  168. > Offset: -1
  169. int(8)
  170. > Offset: -3
  171. int(8)
  172. > Offset: -6
  173. int(4)
  174. > Offset: -20
  175. strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  176. ------- mb_strripos -----------
  177. > Offset: 0
  178. int(8)
  179. > Offset: 3
  180. int(8)
  181. > Offset: 6
  182. int(8)
  183. > Offset: 9
  184. bool(false)
  185. > Offset: 11
  186. bool(false)
  187. > Offset: 12
  188. mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
  189. > Offset: -1
  190. int(8)
  191. > Offset: -3
  192. int(8)
  193. > Offset: -6
  194. int(4)
  195. > Offset: -20
  196. mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)