Implement feature request #50283 (allow base in gmp_strval to use full range: 2 to 62, and -2 to -36)

This commit is contained in:
David Soria Parra 2009-11-24 13:33:35 +00:00
parent c78ca26d9e
commit f6d07bdbb2
2 changed files with 31 additions and 2 deletions

View File

@ -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++;

View File

@ -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--
<?php if (!extension_loaded("gmp")) print "skip"; ?>
--FILE--
<?php
$a = gmp_init("0x41682179fbf5");
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,-36));
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,36));
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,-1));
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,1));
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,-37));
printf("Decimal: %s, 36-based: %s\n", gmp_strval($a), gmp_strval($a,37));
?>
--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: