consistently disallowed now. Previously this worked if the right hand side
was a simple (CV) variable and did not occur as part of the list().
+- BCMath:
+ . BCMath functions will now warn if a non well-formed number is passed, such
+ as "32foo". The argument will be interpreted as zero (as before).
+
- Curl:
. Attempting to serialize a CURLFile class will now generate an exception.
Previously the exception was only thrown on unserialization.
char *p;
if (!(p = strchr(str, '.'))) {
- bc_str2num(num, str, 0);
+ if (!bc_str2num(num, str, 0)) {
+ php_error_docref(NULL, E_WARNING, "bcmath function argument is not well-formed");
+ }
return;
}
- bc_str2num(num, str, strlen(p+1));
+ if (!bc_str2num(num, str, strlen(p+1))) {
+ php_error_docref(NULL, E_WARNING, "bcmath function argument is not well-formed");
+ }
}
/* }}} */
bc_init_num(&first);
bc_init_num(&second);
- bc_str2num(&first, ZSTR_VAL(left), scale);
- bc_str2num(&second, ZSTR_VAL(right), scale);
+ if (!bc_str2num(&first, ZSTR_VAL(left), scale)) {
+ php_error_docref(NULL, E_WARNING, "bcmath function argument is not well-formed");
+ }
+ if (!bc_str2num(&second, ZSTR_VAL(right), scale)) {
+ php_error_docref(NULL, E_WARNING, "bcmath function argument is not well-formed");
+ }
RETVAL_LONG(bc_compare(first, second));
bc_free_num(&first);
_PROTOTYPE(void bc_init_num, (bc_num *num));
-_PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale));
+_PROTOTYPE(int bc_str2num, (bc_num *num, char *str, int scale));
_PROTOTYPE(zend_string *bc_num2str_ex, (bc_num num, int scale));
/* Convert strings to bc numbers. Base 10 only.*/
-void
+int
bc_str2num (bc_num *num, char *str, int scale)
{
int digits, strscale;
if ((*ptr != '\0') || (digits+strscale == 0))
{
*num = bc_copy_num (BCG(_zero_));
- return;
+ return *ptr == '\0';
}
/* Adjust numbers and allocate storage and initialize fields. */
if (bc_is_zero (*num))
(*num)->n_sign = PLUS;
+
+ return 1;
}
--FILE--
<?php
$var48 = bcscale(634314234334311);
-$var67 = bcsqrt(false);
-$var414 = bcadd(false,null,10);
+$var67 = bcsqrt(0);
+$var414 = bcadd(0,-1,10);
die('ALIVE');
?>
--EXPECT--
?>
--FILE--
<?php
-var_dump(bcpowmod(1, "A", 128, -200));
+var_dump(bcpowmod(1, 0, 128, -200));
var_dump(bcpowmod(1, 1.2, 1, 1));
?>
--EXPECTF--
--- /dev/null
+--TEST--
+bcmath lib arguments formatting
+--DESCRIPTION--
+1 and 2 argument of bcadd/bcsub/bcmul/bcdiv/bcmod/bcpowmod/bcpow/bccomp (last one works different then others internally);
+1 argument of bcsqrt
+All of the name above must be well-formed
+--SKIPIF--
+<?php if(!extension_loaded("bcmath")) print "skip"; ?>
+--FILE--
+<?php
+echo bcadd("1", "2"),"\n";
+echo bcadd("1.1", "2", 2),"\n";
+echo bcadd("", "2", 2),"\n";
+echo bcadd("+0", "2"), "\n";
+echo bcadd("-0", "2"), "\n";
+
+echo bcadd(" 0", "2");
+echo bcadd("1e1", "2");
+echo bcadd("1,1", "2");
+echo bcadd("Hello", "2");
+echo bcadd("1 1", "2");
+echo "\n", "\n";
+
+echo bccomp("1", "2"),"\n";
+echo bccomp("1.1", "2", 2),"\n";
+echo bccomp("", "2"),"\n";
+echo bccomp("+0", "2"), "\n";
+echo bccomp("-0", "2"), "\n";
+
+echo bccomp(" 0", "2");
+echo bccomp("1e1", "2");
+echo bccomp("1,1", "2");
+echo bccomp("Hello", "2");
+echo bccomp("1 1", "2");
+?>
+--EXPECTF--
+3
+3.10
+2.00
+2
+2
+
+Warning: bcadd(): bcmath function argument is not well-formed in %s on line %d
+2
+Warning: bcadd(): bcmath function argument is not well-formed in %s on line %d
+2
+Warning: bcadd(): bcmath function argument is not well-formed in %s on line %d
+2
+Warning: bcadd(): bcmath function argument is not well-formed in %s on line %d
+2
+Warning: bcadd(): bcmath function argument is not well-formed in %s on line %d
+2
+
+-1
+-1
+-1
+-1
+-1
+
+Warning: bccomp(): bcmath function argument is not well-formed in %s on line %d
+-1
+Warning: bccomp(): bcmath function argument is not well-formed in %s on line %d
+-1
+Warning: bccomp(): bcmath function argument is not well-formed in %s on line %d
+-1
+Warning: bccomp(): bcmath function argument is not well-formed in %s on line %d
+-1
+Warning: bccomp(): bcmath function argument is not well-formed in %s on line %d
+-1
\ No newline at end of file