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

Reply via email to