From: David Soria Parra Date: Tue, 24 Nov 2009 13:33:35 +0000 (+0000) Subject: Implement feature request #50283 (allow base in gmp_strval to use full range: 2 to... X-Git-Tag: php-5.4.0alpha1~191^2~2355 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f6d07bdbb2230c7e8f91b532bfabec58cd75142b;p=php Implement feature request #50283 (allow base in gmp_strval to use full range: 2 to 62, and -2 to -36) --- diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index d2099a1446..ebfe39ae2f 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -804,14 +804,14 @@ ZEND_FUNCTION(gmp_strval) return; } - if (base < 2 || base > 36) { + if ((base < 2 && base > -2) || base > 36 || base < -36) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for conversion: %ld", base); RETURN_FALSE; } FETCH_GMP_ZVAL(gmpnum, gmpnumber_arg, temp_a); - num_len = mpz_sizeinbase(*gmpnum, base); + num_len = mpz_sizeinbase(*gmpnum, abs(base)); out_string = emalloc(num_len+2); if (mpz_sgn(*gmpnum) < 0) { num_len++; diff --git a/ext/gmp/tests/bug50283.phpt b/ext/gmp/tests/bug50283.phpt new file mode 100644 index 0000000000..4842c00598 --- /dev/null +++ b/ext/gmp/tests/bug50283.phpt @@ -0,0 +1,29 @@ +--TEST-- +Feature Request #50283 (allow base in gmp_strval to use full range: 2 to 62, and -2 to -36) +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Decimal: 71915494046709, 36-based: PHPISCOOL +Decimal: 71915494046709, 36-based: phpiscool + +Warning: gmp_strval(): Bad base for conversion: -1 in %s on line 5 +Decimal: 71915494046709, 36-based: + +Warning: gmp_strval(): Bad base for conversion: 1 in %s on line 6 +Decimal: 71915494046709, 36-based: + +Warning: gmp_strval(): Bad base for conversion: -37 in %s on line 7 +Decimal: 71915494046709, 36-based: + +Warning: gmp_strval(): Bad base for conversion: 37 in %s on line 8 +Decimal: 71915494046709, 36-based: