bug80560.phpt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. --TEST--
  2. Bug #80560: Strings containing only a base prefix return 0 object
  3. --EXTENSIONS--
  4. gmp
  5. --FILE--
  6. <?php
  7. $functions1 = [
  8. 'gmp_init',
  9. 'gmp_export',
  10. 'gmp_intval',
  11. 'gmp_strval',
  12. 'gmp_neg',
  13. 'gmp_abs',
  14. 'gmp_fact',
  15. 'gmp_sqrt',
  16. 'gmp_sqrtrem',
  17. 'gmp_perfect_square',
  18. 'gmp_perfect_power',
  19. 'gmp_prob_prime',
  20. 'gmp_sign',
  21. 'gmp_random_seed',
  22. 'gmp_popcount',
  23. 'gmp_com',
  24. 'gmp_nextprime',
  25. ];
  26. $functions1_need_int_2 = [
  27. 'gmp_testbit',
  28. 'gmp_scan0',
  29. 'gmp_scan1',
  30. 'gmp_binomial',
  31. 'gmp_root',
  32. 'gmp_rootrem',
  33. 'gmp_pow',
  34. ];
  35. $functions2 = [
  36. 'gmp_add',
  37. 'gmp_sub',
  38. 'gmp_mul',
  39. 'gmp_div',
  40. 'gmp_div_q',
  41. 'gmp_div_r',
  42. 'gmp_div_qr',
  43. 'gmp_divexact',
  44. 'gmp_mod',
  45. 'gmp_gcd',
  46. 'gmp_gcdext',
  47. 'gmp_lcm',
  48. 'gmp_invert',
  49. 'gmp_jacobi',
  50. 'gmp_legendre',
  51. 'gmp_kronecker',
  52. 'gmp_cmp',
  53. 'gmp_random_range',
  54. 'gmp_and',
  55. 'gmp_or',
  56. 'gmp_xor',
  57. 'gmp_hamdist',
  58. ];
  59. $functions3 = [
  60. 'gmp_powm',
  61. ];
  62. echo 'Explicit base with gmp_init:', \PHP_EOL;
  63. echo 'Hexadecimal', \PHP_EOL;
  64. try {
  65. var_dump(gmp_init('0X', 16));
  66. } catch (\ValueError $e) {
  67. echo $e->getMessage(), \PHP_EOL;
  68. }
  69. try {
  70. var_dump(gmp_init('0x', 16));
  71. } catch (\ValueError $e) {
  72. echo $e->getMessage(), \PHP_EOL;
  73. }
  74. echo 'Binary', \PHP_EOL;
  75. try {
  76. var_dump(gmp_init('0B', 2));
  77. } catch (\ValueError $e) {
  78. echo $e->getMessage(), \PHP_EOL;
  79. }
  80. try {
  81. var_dump(gmp_init('0b', 2));
  82. } catch (\ValueError $e) {
  83. echo $e->getMessage(), \PHP_EOL;
  84. }
  85. echo 'Fuzzing gmp functions:', \PHP_EOL;
  86. foreach ($functions1 as $function) {
  87. try {
  88. $function('0B');
  89. echo $function, ' failed with 0B', \PHP_EOL;
  90. } catch (\ValueError) { }
  91. try {
  92. $function('0b');
  93. echo $function, ' failed with 0b', \PHP_EOL;
  94. } catch (\ValueError) { }
  95. try {
  96. $function('0X');
  97. echo $function, ' failed with 0X', \PHP_EOL;
  98. } catch (\ValueError) { }
  99. try {
  100. $function('0x');
  101. echo $function, ' failed with 0x', \PHP_EOL;
  102. } catch (\ValueError) { }
  103. }
  104. foreach ($functions1_need_int_2 as $function) {
  105. try {
  106. $function('0B', 1);
  107. echo $function, ' failed with 0B', \PHP_EOL;
  108. } catch (\ValueError) { }
  109. try {
  110. $function('0b', 1);
  111. echo $function, ' failed with 0b', \PHP_EOL;
  112. } catch (\ValueError) { }
  113. try {
  114. $function('0X', 1);
  115. echo $function, ' failed with 0X', \PHP_EOL;
  116. } catch (\ValueError) { }
  117. try {
  118. $function('0x', 1);
  119. echo $function, ' failed with 0x', \PHP_EOL;
  120. } catch (\ValueError) { }
  121. }
  122. foreach ($functions2 as $function) {
  123. try {
  124. $function('0B', 1);
  125. echo $function, ' arg 1 failed with 0B', \PHP_EOL;
  126. } catch (\ValueError) { }
  127. try {
  128. $function('0b', 1);
  129. echo $function, ' arg 1 failed with 0b', \PHP_EOL;
  130. } catch (\ValueError) { }
  131. try {
  132. $function('0X', 1);
  133. echo $function, ' arg 1 failed with 0X', \PHP_EOL;
  134. } catch (\ValueError) { }
  135. try {
  136. $function('0x', 1);
  137. echo $function, ' arg 1 failed with 0x', \PHP_EOL;
  138. } catch (\ValueError) { }
  139. try {
  140. $function(1, '0B');
  141. echo $function, ' arg 2 failed with 0B', \PHP_EOL;
  142. } catch (\ValueError) { }
  143. try {
  144. $function(1, '0b');
  145. echo $function, ' arg 2 failed with 0b', \PHP_EOL;
  146. } catch (\ValueError) { }
  147. try {
  148. $function(1, '0X');
  149. echo $function, ' arg 2 failed with 0X', \PHP_EOL;
  150. } catch (\ValueError) { }
  151. try {
  152. $function(1, '0x');
  153. echo $function, ' arg 2 failed with 0x', \PHP_EOL;
  154. } catch (\ValueError) { }
  155. }
  156. foreach ($functions3 as $function) {
  157. try {
  158. $function('0B', 1, 1);
  159. echo $function, ' arg 1 failed with 0B', \PHP_EOL;
  160. } catch (\ValueError) { }
  161. try {
  162. $function('0b', 1, 1);
  163. echo $function, ' arg 1 failed with 0b', \PHP_EOL;
  164. } catch (\ValueError) { }
  165. try {
  166. $function('0X', 1, 1);
  167. echo $function, ' arg 1 failed with 0X', \PHP_EOL;
  168. } catch (\ValueError) { }
  169. try {
  170. $function('0x', 1, 1);
  171. echo $function, ' arg 1 failed with 0x', \PHP_EOL;
  172. } catch (\ValueError) { }
  173. try {
  174. $function(1, '0B', 1);
  175. echo $function, ' arg 2 failed with 0B', \PHP_EOL;
  176. } catch (\ValueError) { }
  177. try {
  178. $function(1, '0b', 1);
  179. echo $function, ' arg 2 failed with 0b', \PHP_EOL;
  180. } catch (\ValueError) { }
  181. try {
  182. $function(1, '0X', 1);
  183. echo $function, ' arg 2 failed with 0X', \PHP_EOL;
  184. } catch (\ValueError) { }
  185. try {
  186. $function(1, '0x', 1);
  187. echo $function, ' arg 2 failed with 0x', \PHP_EOL;
  188. } catch (\ValueError) { }
  189. try {
  190. $function(1, 1, '0B');
  191. echo $function, ' arg 3 failed with 0B', \PHP_EOL;
  192. } catch (\ValueError) { }
  193. try {
  194. $function(1, 1, '0b');
  195. echo $function, ' arg 3 failed with 0b', \PHP_EOL;
  196. } catch (\ValueError) { }
  197. try {
  198. $function(1, 1, '0X');
  199. echo $function, ' arg 3 failed with 0X', \PHP_EOL;
  200. } catch (\ValueError) { }
  201. try {
  202. $function(1, 1, '0x');
  203. echo $function, ' arg 3 failed with 0x', \PHP_EOL;
  204. } catch (\ValueError) { }
  205. }
  206. echo "Done\n";
  207. ?>
  208. --EXPECT--
  209. Explicit base with gmp_init:
  210. Hexadecimal
  211. gmp_init(): Argument #1 ($num) is not an integer string
  212. gmp_init(): Argument #1 ($num) is not an integer string
  213. Binary
  214. gmp_init(): Argument #1 ($num) is not an integer string
  215. gmp_init(): Argument #1 ($num) is not an integer string
  216. Fuzzing gmp functions:
  217. Done