summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2005-10-30 13:44:26 +0000
committerIlia Alshanetsky <iliaa@php.net>2005-10-30 13:44:26 +0000
commitd22d6910ad9aed411654bd27f356fb7ee978a9eb (patch)
tree4f1253eccfef0ab0631019756d3f6eac1aa6c4f4 /ext
parentcc4b4536115fdfd49fd2dbbe1befb2914e9127c8 (diff)
downloadphp-git-d22d6910ad9aed411654bd27f356fb7ee978a9eb.tar.gz
Fixed Bug #35014 (array_product() always returns 0).
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/array.c8
-rw-r--r--ext/standard/tests/array/bug35014.phpt31
2 files changed, 37 insertions, 2 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index bbb4e958bd..b00934bfc6 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -3996,8 +3996,12 @@ PHP_FUNCTION(array_product)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
return;
}
-
- ZVAL_LONG(return_value, 0);
+
+ if (!zend_hash_num_elements(Z_ARRVAL_PP(input))) {
+ RETURN_LONG(0);
+ return;
+ }
+ ZVAL_LONG(return_value, 1);
for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(input), &pos);
zend_hash_get_current_data_ex(Z_ARRVAL_PP(input), (void **)&entry, &pos) == SUCCESS;
diff --git a/ext/standard/tests/array/bug35014.phpt b/ext/standard/tests/array/bug35014.phpt
new file mode 100644
index 0000000000..8599a3c7ca
--- /dev/null
+++ b/ext/standard/tests/array/bug35014.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Bug #35014 (array_product() always returns 0)
+--FILE--
+<?php
+$tests = array(
+ 'foo',
+ array(),
+ array(0),
+ array(3),
+ array(3, 3),
+ array(0.5, 2),
+ array(99999999, 99999999),
+ array(8.993, 7443241,988, sprintf("%u", -1)+0.44),
+ array(2,sprintf("%u", -1)),
+);
+
+foreach ($tests as $v) {
+ var_dump(array_product($v));
+}
+?>
+--EXPECTF--
+Warning: array_product(): The argument should be an array in %s/bug35014.php on line 15
+NULL
+int(0)
+int(0)
+int(3)
+int(9)
+float(1)
+float(9.9999998E+15)
+float(2.8404260053903E+20)
+float(8589934590)