]> granicus.if.org Git - php/commitdiff
Fixed Bug #35014 (array_product() always returns 0).
authorIlia Alshanetsky <iliaa@php.net>
Sun, 30 Oct 2005 13:44:26 +0000 (13:44 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sun, 30 Oct 2005 13:44:26 +0000 (13:44 +0000)
NEWS
ext/standard/array.c
ext/standard/tests/array/bug35014.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index ec020b10e3c94990d4216c1a201a6961a5c42990..a1dc4d13c31e245ac8e0bcebf27142820dafa969 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Nov 2005, PHP 5.1
+- Fixed bug #35014 (array_product() always returns 0). (Ilia)
 
 28 Oct 2005, PHP 5.1 Release Candidate 4
 - Fixed fgetcsv() and fputcsv() inconsistency. (Dmitry)
index bbb4e958bd8dcbadd888cc9e48455bfdc2724529..b00934bfc6f096cfe2a73d35e540d5f921896c49 100644 (file)
@@ -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 (file)
index 0000000..8599a3c
--- /dev/null
@@ -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)