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

index a2ef5c21c4c02b5a2cc3fc679d701423b8fdeb14..02ea08c006ce9610da41d01dd631889b89f1056f 100644 (file)
@@ -4244,7 +4244,10 @@ PHP_FUNCTION(array_product)
                return;
        }
 
-       ZVAL_LONG(return_value, 0);
+       if (!zend_hash_num_elements(Z_ARRVAL_PP(input))) {
+               RETURN_LONG(0);
+       }
+       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)