summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorChris Wright <daverandom@php.net>2014-08-18 13:49:28 +0100
committerChris Wright <daverandom@php.net>2014-08-18 13:56:02 +0100
commit1e3435b2898ea2b9e16ca92064edd8fa1a07b44c (patch)
tree6f2578ef2460211e776d1aaceb2f40b09ec99cae /ext
parent35189d2dd68f9451512c018ed26918652f48a4fd (diff)
downloadphp-git-1e3435b2898ea2b9e16ca92064edd8fa1a07b44c.tar.gz
Return old scale value from bcscale()
Fix for #67855
Diffstat (limited to 'ext')
-rw-r--r--ext/bcmath/bcmath.c14
-rw-r--r--ext/bcmath/tests/bcscale_variation003.phpt18
2 files changed, 27 insertions, 5 deletions
diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c
index 4b8c7c5f18..39228ba7ce 100644
--- a/ext/bcmath/bcmath.c
+++ b/ext/bcmath/bcmath.c
@@ -537,15 +537,19 @@ PHP_FUNCTION(bccomp)
Sets default scale parameter for all bc math functions */
PHP_FUNCTION(bcscale)
{
- long new_scale;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_scale) == FAILURE) {
+ long old_scale, new_scale;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &new_scale) == FAILURE) {
return;
}
- BCG(bc_precision) = ((int)new_scale < 0) ? 0 : new_scale;
+ old_scale = BCG(bc_precision);
+
+ if (ZEND_NUM_ARGS() == 1) {
+ BCG(bc_precision) = ((int)new_scale < 0) ? 0 : new_scale;
+ }
- RETURN_TRUE;
+ RETURN_LONG(old_scale);
}
/* }}} */
diff --git a/ext/bcmath/tests/bcscale_variation003.phpt b/ext/bcmath/tests/bcscale_variation003.phpt
new file mode 100644
index 0000000000..b1c541644c
--- /dev/null
+++ b/ext/bcmath/tests/bcscale_variation003.phpt
@@ -0,0 +1,18 @@
+--TEST--
+bcscale() return value
+--SKIPIF--
+<?php if(!extension_loaded("bcmath")) print "skip"; ?>
+--INI--
+bcmath.scale=0
+--FILE--
+<?php
+var_dump(bcscale(1));
+var_dump(bcscale(4));
+var_dump(bcscale());
+var_dump(bcscale());
+?>
+--EXPECT--
+int(0)
+int(1)
+int(4)
+int(4)