stas Fri, 01 Oct 2010 00:12:23 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=303910
Log: Fix bug #52906 gmp_mod returns negative result when non-negative is expected Bug: http://bugs.php.net/52906 (Verified) gmp_mod returns negative result when non-negative is expected Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/gmp/gmp.c U php/php-src/branches/PHP_5_3/ext/gmp/tests/005.phpt U php/php-src/branches/PHP_5_3/ext/gmp/tests/040.phpt U php/php-src/branches/PHP_5_3/ext/gmp/tests/bug50283.phpt A php/php-src/branches/PHP_5_3/ext/gmp/tests/bug52906.phpt U php/php-src/branches/PHP_5_3/ext/gmp/tests/gmp_nextprime.phpt U php/php-src/trunk/ext/gmp/gmp.c U php/php-src/trunk/ext/gmp/tests/005.phpt U php/php-src/trunk/ext/gmp/tests/040.phpt U php/php-src/trunk/ext/gmp/tests/bug50283.phpt A php/php-src/trunk/ext/gmp/tests/bug52906.phpt U php/php-src/trunk/ext/gmp/tests/gmp_nextprime.phpt
Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/NEWS 2010-10-01 00:12:23 UTC (rev 303910) @@ -33,6 +33,8 @@ - Fixed bug #52929 (Segfault in filter_var with FILTER_VALIDATE_EMAIL with large amount of data). (Adam) - Fixed bug #52926 (zlib fopen wrapper does not use context). (Gustavo) +- Fixed bug #52906 (gmp_mod returns negative result when non-negative is + expected). (Stas) - Fixed bug #52891 (Wrong data inserted with mysqli/mysqlnd when using mysqli_stmt_bind_param and value> PHP_INT_MAX). (Andrey) - Fixed bug #52849 (GNU MP invalid version match). (Adam) Modified: php/php-src/branches/PHP_5_3/ext/gmp/gmp.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/gmp.c 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/ext/gmp/gmp.c 2010-10-01 00:12:23 UTC (rev 303910) @@ -492,8 +492,8 @@ typedef unsigned long (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long); /* }}} */ -#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0, 0 TSRMLS_CC) -#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0, 0 TSRMLS_CC) +#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0, 0, 0 TSRMLS_CC) +#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0, 0, 0 TSRMLS_CC) #define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop) #define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL) @@ -508,7 +508,7 @@ Execute GMP binary operation. May return GMP resource or long if operation allows this */ -static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return, int check_b_zero TSRMLS_DC) +static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return, int check_b_zero, int use_sign TSRMLS_DC) { mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result; unsigned long long_result = 0; @@ -544,7 +544,7 @@ if (use_ui && gmp_ui_op) { if (allow_ui_return) { long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); - if (mpz_sgn(*gmpnum_a) == -1) { + if (use_sign && mpz_sgn(*gmpnum_a) == -1) { long_result = -long_result; } } else { @@ -914,13 +914,13 @@ switch (round) { case GMP_ROUND_ZERO: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; case GMP_ROUND_PLUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; case GMP_ROUND_MINUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; } } @@ -939,13 +939,13 @@ switch (round) { case GMP_ROUND_ZERO: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; case GMP_ROUND_PLUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; case GMP_ROUND_MINUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; } @@ -957,12 +957,14 @@ ZEND_FUNCTION(gmp_mod) { zval **a_arg, **b_arg; + zval b_copy; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &a_arg, &b_arg) == FAILURE){ return; } + - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1, 1, 0 TSRMLS_CC); } /* }}} */ @@ -976,7 +978,7 @@ return; } - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_divexact, NULL, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_divexact, NULL, 0, 1, 1 TSRMLS_CC); } /* }}} */ @@ -1224,7 +1226,7 @@ return; } - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 0, 0 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 0, 0, 1 TSRMLS_CC); } /* }}} */ Modified: php/php-src/branches/PHP_5_3/ext/gmp/tests/005.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/tests/005.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/ext/gmp/tests/005.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -41,7 +41,7 @@ Warning: gmp_strval() expects parameter 2 to be long, string given in %s on line %d NULL -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) Warning: gmp_strval() expects parameter 2 to be long, string given in %s on line %d @@ -51,18 +51,18 @@ bool(false) string(7) "9765456" -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) -Warning: gmp_strval(): Bad base for conversion: 100000 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: 100000 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) string(7) "9765456" string(8) "-3373333" -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) -Warning: gmp_strval(): Bad base for conversion: 100000 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: 100000 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) string(8) "-3373333" Modified: php/php-src/branches/PHP_5_3/ext/gmp/tests/040.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/tests/040.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/ext/gmp/tests/040.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -32,7 +32,7 @@ Warning: gmp_init() expects at most 2 parameters, 4 given in %s on line %d NULL -Warning: gmp_init(): Bad base for conversion: -1 (should be between 2 and 36) in %s on line %d +Warning: gmp_init(): Bad base for conversion: -1 (should be between 2 and %d) in %s on line %d bool(false) bool(false) bool(false) Modified: php/php-src/branches/PHP_5_3/ext/gmp/tests/bug50283.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/tests/bug50283.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/ext/gmp/tests/bug50283.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -2,6 +2,7 @@ Feature Request #50283 (allow base in gmp_strval to use full range: 2 to 62, and -2 to -36) --SKIPIF-- <?php if (!extension_loaded("gmp")) print "skip"; ?> +<?php if (version_compare(GMP_VERSION, "4.2.0", "<")) print "skip"; ?> --FILE-- <?php $a = gmp_init("0x41682179fbf5"); @@ -19,18 +20,18 @@ Decimal: 71915494046709, -36-based: PHPISCOOL Decimal: 71915494046709, 36-based: phpiscool -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line 5 +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line 5 Decimal: 71915494046709, -1-based: -Warning: gmp_strval(): Bad base for conversion: 1 in %s on line 6 +Warning: gmp_strval(): Bad base for conversion: 1 (should be between 2 and %d or -2 and -%d) in %s on line 6 Decimal: 71915494046709, 1-based: -Warning: gmp_strval(): Bad base for conversion: -37 in %s on line 7 +Warning: gmp_strval(): Bad base for conversion: -37 (should be between 2 and %d or -2 and -%d) in %s on line 7 Decimal: 71915494046709, -37-based: Decimal: 71915494046709, 37-based: KHKATELJF Decimal: 71915494046709, 62-based: KQ6yq741 -Warning: gmp_strval(): Bad base for conversion: 63 in %s on line 10 +Warning: gmp_strval(): Bad base for conversion: 63 (should be between 2 and %d or -2 and -%d) in %s on line 10 Decimal: 71915494046709, 63-based: Base 32 and 62-based: 1NHkAcdIiD Added: php/php-src/branches/PHP_5_3/ext/gmp/tests/bug52906.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/tests/bug52906.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/gmp/tests/bug52906.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -0,0 +1,46 @@ +--TEST-- +Bug #52906 gmp_mod returns negative result when non-negative is expected +--SKIPIF-- +<?php if (!extension_loaded("gmp")) print "skip"; ?> +--FILE-- +<?php + +$vals = array( + array(7, 3), + array(2, 7), + array(12, 7), + array(-2, 7), + array(-12, 7), + array(2, -7), + array(12, -7), + array(-2, -7), + array(-12, -7), +); +foreach($vals as $data) { + echo "{$data[0]}%{$data[1]}=".gmp_strval(gmp_mod($data[0], $data[1])); + echo "\n"; + echo "{$data[0]}%{$data[1]}=".gmp_strval(gmp_mod(gmp_init($data[0]), gmp_init($data[1]))); + echo "\n"; +} +echo "Done\n"; +?> +--EXPECTF-- +7%3=1 +7%3=1 +2%7=2 +2%7=2 +12%7=5 +12%7=5 +-2%7=5 +-2%7=5 +-12%7=2 +-12%7=2 +2%-7=2 +2%-7=2 +12%-7=5 +12%-7=5 +-2%-7=5 +-2%-7=5 +-12%-7=2 +-12%-7=2 +Done Modified: php/php-src/branches/PHP_5_3/ext/gmp/tests/gmp_nextprime.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/gmp/tests/gmp_nextprime.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/branches/PHP_5_3/ext/gmp/tests/gmp_nextprime.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -27,7 +27,7 @@ --EXPECTF-- string(1) "2" string(1) "2" -string(4) "-997" +string(1) "2" string(4) "1009" string(6) "100003" Modified: php/php-src/trunk/ext/gmp/gmp.c =================================================================== --- php/php-src/trunk/ext/gmp/gmp.c 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/trunk/ext/gmp/gmp.c 2010-10-01 00:12:23 UTC (rev 303910) @@ -492,8 +492,8 @@ typedef unsigned long (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long); /* }}} */ -#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0, 0 TSRMLS_CC) -#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0, 0 TSRMLS_CC) +#define gmp_zval_binary_ui_op(r, a, b, o, u) gmp_zval_binary_ui_op_ex(r, a, b, o, u, 0, 0, 0 TSRMLS_CC) +#define gmp_zval_binary_ui_op2(r, a, b, o, u) gmp_zval_binary_ui_op2_ex(r, a, b, o, u, 0, 0, 0 TSRMLS_CC) #define gmp_binary_ui_op(op, uop) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, uop) #define gmp_binary_op(op) _gmp_binary_ui_op(INTERNAL_FUNCTION_PARAM_PASSTHRU, op, NULL) @@ -508,7 +508,7 @@ Execute GMP binary operation. May return GMP resource or long if operation allows this */ -static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return, int check_b_zero TSRMLS_DC) +static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zval **b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int allow_ui_return, int check_b_zero, int use_sign TSRMLS_DC) { mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result; unsigned long long_result = 0; @@ -544,7 +544,7 @@ if (use_ui && gmp_ui_op) { if (allow_ui_return) { long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned long)Z_LVAL_PP(b_arg)); - if (mpz_sgn(*gmpnum_a) == -1) { + if (use_sign && mpz_sgn(*gmpnum_a) == -1) { long_result = -long_result; } } else { @@ -914,13 +914,13 @@ switch (round) { case GMP_ROUND_ZERO: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_r, (gmp_binary_ui_op_t)mpz_tdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; case GMP_ROUND_PLUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_r, (gmp_binary_ui_op_t)mpz_cdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; case GMP_ROUND_MINUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_r, (gmp_binary_ui_op_t)mpz_fdiv_r_ui, 1, 1, 1 TSRMLS_CC); break; } } @@ -939,13 +939,13 @@ switch (round) { case GMP_ROUND_ZERO: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_tdiv_q, (gmp_binary_ui_op_t)mpz_tdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; case GMP_ROUND_PLUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_cdiv_q, (gmp_binary_ui_op_t)mpz_cdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; case GMP_ROUND_MINUSINF: - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_fdiv_q, (gmp_binary_ui_op_t)mpz_fdiv_q_ui, 0, 1, 1 TSRMLS_CC); break; } @@ -957,12 +957,14 @@ ZEND_FUNCTION(gmp_mod) { zval **a_arg, **b_arg; + zval b_copy; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &a_arg, &b_arg) == FAILURE){ return; } + - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_mod, (gmp_binary_ui_op_t)mpz_mod_ui, 1, 1, 0 TSRMLS_CC); } /* }}} */ @@ -976,7 +978,7 @@ return; } - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_divexact, NULL, 0, 1 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_divexact, NULL, 0, 1, 1 TSRMLS_CC); } /* }}} */ @@ -1224,7 +1226,7 @@ return; } - gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 0, 0 TSRMLS_CC); + gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, (gmp_binary_ui_op_t)mpz_gcd_ui, 0, 0, 1 TSRMLS_CC); } /* }}} */ Modified: php/php-src/trunk/ext/gmp/tests/005.phpt =================================================================== --- php/php-src/trunk/ext/gmp/tests/005.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/trunk/ext/gmp/tests/005.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -41,7 +41,7 @@ Warning: gmp_strval() expects parameter 2 to be long, string given in %s on line %d NULL -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) Warning: gmp_strval() expects parameter 2 to be long, string given in %s on line %d @@ -51,18 +51,18 @@ bool(false) string(7) "9765456" -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) -Warning: gmp_strval(): Bad base for conversion: 100000 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: 100000 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) string(7) "9765456" string(8) "-3373333" -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) -Warning: gmp_strval(): Bad base for conversion: 100000 in %s on line %d +Warning: gmp_strval(): Bad base for conversion: 100000 (should be between 2 and %d or -2 and -%d) in %s on line %d bool(false) string(8) "-3373333" Modified: php/php-src/trunk/ext/gmp/tests/040.phpt =================================================================== --- php/php-src/trunk/ext/gmp/tests/040.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/trunk/ext/gmp/tests/040.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -32,7 +32,7 @@ Warning: gmp_init() expects at most 2 parameters, 4 given in %s on line %d NULL -Warning: gmp_init(): Bad base for conversion: -1 (should be between 2 and 36) in %s on line %d +Warning: gmp_init(): Bad base for conversion: -1 (should be between 2 and %d) in %s on line %d bool(false) bool(false) bool(false) Modified: php/php-src/trunk/ext/gmp/tests/bug50283.phpt =================================================================== --- php/php-src/trunk/ext/gmp/tests/bug50283.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/trunk/ext/gmp/tests/bug50283.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -2,6 +2,7 @@ Feature Request #50283 (allow base in gmp_strval to use full range: 2 to 62, and -2 to -36) --SKIPIF-- <?php if (!extension_loaded("gmp")) print "skip"; ?> +<?php if (version_compare(GMP_VERSION, "4.2.0", "<")) print "skip"; ?> --FILE-- <?php $a = gmp_init("0x41682179fbf5"); @@ -19,18 +20,18 @@ Decimal: 71915494046709, -36-based: PHPISCOOL Decimal: 71915494046709, 36-based: phpiscool -Warning: gmp_strval(): Bad base for conversion: -1 in %s on line 5 +Warning: gmp_strval(): Bad base for conversion: -1 (should be between 2 and %d or -2 and -%d) in %s on line 5 Decimal: 71915494046709, -1-based: -Warning: gmp_strval(): Bad base for conversion: 1 in %s on line 6 +Warning: gmp_strval(): Bad base for conversion: 1 (should be between 2 and %d or -2 and -%d) in %s on line 6 Decimal: 71915494046709, 1-based: -Warning: gmp_strval(): Bad base for conversion: -37 in %s on line 7 +Warning: gmp_strval(): Bad base for conversion: -37 (should be between 2 and %d or -2 and -%d) in %s on line 7 Decimal: 71915494046709, -37-based: Decimal: 71915494046709, 37-based: KHKATELJF Decimal: 71915494046709, 62-based: KQ6yq741 -Warning: gmp_strval(): Bad base for conversion: 63 in %s on line 10 +Warning: gmp_strval(): Bad base for conversion: 63 (should be between 2 and %d or -2 and -%d) in %s on line 10 Decimal: 71915494046709, 63-based: Base 32 and 62-based: 1NHkAcdIiD Added: php/php-src/trunk/ext/gmp/tests/bug52906.phpt =================================================================== --- php/php-src/trunk/ext/gmp/tests/bug52906.phpt (rev 0) +++ php/php-src/trunk/ext/gmp/tests/bug52906.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -0,0 +1,46 @@ +--TEST-- +Bug #52906 gmp_mod returns negative result when non-negative is expected +--SKIPIF-- +<?php if (!extension_loaded("gmp")) print "skip"; ?> +--FILE-- +<?php + +$vals = array( + array(7, 3), + array(2, 7), + array(12, 7), + array(-2, 7), + array(-12, 7), + array(2, -7), + array(12, -7), + array(-2, -7), + array(-12, -7), +); +foreach($vals as $data) { + echo "{$data[0]}%{$data[1]}=".gmp_strval(gmp_mod($data[0], $data[1])); + echo "\n"; + echo "{$data[0]}%{$data[1]}=".gmp_strval(gmp_mod(gmp_init($data[0]), gmp_init($data[1]))); + echo "\n"; +} +echo "Done\n"; +?> +--EXPECTF-- +7%3=1 +7%3=1 +2%7=2 +2%7=2 +12%7=5 +12%7=5 +-2%7=5 +-2%7=5 +-12%7=2 +-12%7=2 +2%-7=2 +2%-7=2 +12%-7=5 +12%-7=5 +-2%-7=5 +-2%-7=5 +-12%-7=2 +-12%-7=2 +Done Modified: php/php-src/trunk/ext/gmp/tests/gmp_nextprime.phpt =================================================================== --- php/php-src/trunk/ext/gmp/tests/gmp_nextprime.phpt 2010-09-30 21:53:35 UTC (rev 303909) +++ php/php-src/trunk/ext/gmp/tests/gmp_nextprime.phpt 2010-10-01 00:12:23 UTC (rev 303910) @@ -27,7 +27,7 @@ --EXPECTF-- string(1) "2" string(1) "2" -string(4) "-997" +string(1) "2" string(4) "1009" string(6) "100003"
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php