mattwil Fri May 30 10:55:44 2008 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/standard array.c
Log:
MFH: Only check args once in php_array_diff_key/intersect_key, not on each
iteration. This also makes sure ALL args are checked (pre-5.2.5 behavior)
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.308.2.21.2.56&r2=1.308.2.21.2.57&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.308.2.21.2.56
php-src/ext/standard/array.c:1.308.2.21.2.57
--- php-src/ext/standard/array.c:1.308.2.21.2.56 Sun May 18 21:50:58 2008
+++ php-src/ext/standard/array.c Fri May 30 10:55:44 2008
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.308.2.21.2.56 2008/05/18 21:50:58 felipe Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.57 2008/05/30 10:55:44 mattwil Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -2992,10 +2992,12 @@
intersect_data_compare_func = zval_compare;
}
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #1 is not
an array");
- RETVAL_NULL();
- goto out;
+ for (i = 0; i < argc; i++) {
+ if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument
#%d is not an array", i + 1);
+ RETVAL_NULL();
+ goto out;
+ }
}
array_init(return_value);
@@ -3004,12 +3006,7 @@
if (p->nKeyLength == 0) {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if
(zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == FAILURE ||
+ if (zend_hash_index_find(Z_ARRVAL_PP(args[i]),
p->h, (void**)&data) == FAILURE ||
(intersect_data_compare_func &&
intersect_data_compare_func((zval**)p->pData, data TSRMLS_CC) != 0)) {
ok = 0;
@@ -3023,12 +3020,7 @@
} else {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if
(zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h,
(void**)&data) == FAILURE ||
+ if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]),
p->arKey, p->nKeyLength, p->h, (void**)&data) == FAILURE ||
(intersect_data_compare_func &&
intersect_data_compare_func((zval**)p->pData, data TSRMLS_CC) != 0)) {
ok = 0;
@@ -3470,10 +3462,12 @@
diff_data_compare_func = zval_compare;
}
- if (Z_TYPE_PP(args[0]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument #1 is not
an array");
- RETVAL_NULL();
- goto out;
+ for (i = 0; i < argc; i++) {
+ if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument
#%d is not an array", i + 1);
+ RETVAL_NULL();
+ goto out;
+ }
}
array_init(return_value);
@@ -3482,12 +3476,7 @@
if (p->nKeyLength == 0) {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if
(zend_hash_index_find(Z_ARRVAL_PP(args[i]), p->h, (void**)&data) == SUCCESS &&
+ if (zend_hash_index_find(Z_ARRVAL_PP(args[i]),
p->h, (void**)&data) == SUCCESS &&
(!diff_data_compare_func ||
diff_data_compare_func((zval**)p->pData,
data TSRMLS_CC) == 0)) {
ok = 0;
@@ -3501,12 +3490,7 @@
} else {
ok = 1;
for (i = 1; i < argc; i++) {
- if (Z_TYPE_PP(args[i]) != IS_ARRAY) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING, "Argument #%d is not an array", i + 1);
- zval_dtor(return_value);
- RETVAL_NULL();
- goto out;
- } else if
(zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p->arKey, p->nKeyLength, p->h,
(void**)&data) == SUCCESS &&
+ if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]),
p->arKey, p->nKeyLength, p->h, (void**)&data) == SUCCESS &&
(!diff_data_compare_func ||
diff_data_compare_func((zval**)p->pData,
data TSRMLS_CC) == 0)) {
ok = 0;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php