Re: cvs: php-src /ext/standard array.c /ext/standard/tests/array bug34934.phpt
| From: | Marcus Boerger | Date: | Fri, 21 Oct 2005 18:01:29 +0000 |
| Subject: | Re: cvs: php-src /ext/standard array.c /ext/standard/tests/array bug34934.phpt | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-34726@lists.php.net to get a copy of this message | ||
Hello Dmitry,
this is wrong! We agreed upon not allowing ArrayAccess in array*
functions. If you change this then change the macros in array.c from
Z_ARRVAL to HASH_OF and ensure that all functions also work with
ArrayAccess. Since you cannot do that you might probably explain why
the bug report is bogus!
marcus
Friday, October 21, 2005, 5:20:31 PM, you wrote:
> dmitry Fri Oct 21 11:20:31 2005 EDT
> Modified files:
> /php-src/ext/standard array.c
> /php-src/ext/standard/tests/array bug34934.phpt
> Log:
> Fixed bug #34934 (offsetExists is not called from array_key_exists)
>
>
>
> http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.327&r2=1.328&ty=uÖëy|<
> ´R|ôð5æ‘
> Index: php-src/ext/standard/array.c
> diff -u php-src/ext/standard/array.c:1.327 php-src/ext/standard/array.c:1.328
> --- php-src/ext/standard/array.c:1.327 Tue Oct 4 16:47:48 2005
> +++ php-src/ext/standard/array.c Fri Oct 21 11:20:30 2005
> @@ -21,7 +21,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: array.c,v 1.327 2005/10/04 20:47:48 tony2001 Exp $ */
> +/* $Id: array.c,v 1.328 2005/10/21 15:20:30 dmitry Exp $ */
>
> #include "php.h"
> #include "php_ini.h"
> @@ -4658,6 +4658,17 @@
> RETURN_FALSE;
> }
>
> + if (Z_TYPE_PP(array) == IS_OBJECT &&
> + Z_OBJ_HT_PP(array)->has_dimension &&
> + (Z_OBJ_HT_PP(array)->has_dimension != std_object_handlers.has_dimension ||
> + instanceof_function_ex(Z_OBJCE_PP(array),
> U_CLASS_ENTRY(zend_ce_arrayaccess), 1 TSRMLS_CC))) {
> + if (Z_OBJ_HT_PP(array)->has_dimension(*array, *key, 0 TSRMLS_CC)) {
> + RETURN_TRUE;
> + } else {
> + RETURN_FALSE;
> + }
> + }
> +
> switch (Z_TYPE_PP(key)) {
> case IS_STRING:
> case IS_UNICODE:
>
> http://cvs.php.net/diff.php/php-src/ext/standard/tests/array/bug34934.phpt?r1=1.1&r2=1.2&ty=u
> Index: php-src/ext/standard/tests/array/bug34934.phpt
> diff -u /dev/null php-src/ext/standard/tests/array/bug34934.phpt:1.2
> --- /dev/null Fri Oct 21 11:20:31 2005
> +++ php-src/ext/standard/tests/array/bug34934.phpt Fri Oct 21 11:20:30 2005
> @@ -0,0 +1,18 @@
> +--TEST--
> +Bug #34934 (offsetExists is not called from array_key_exists)
> +--FILE--
> +<?php
> +class MyArray extends ArrayObject {
> + function offsetExists($mKey) {
> + echo __METHOD__ . "($mKey)\n";
> + return true;
> + }
> +}
> +
> +$a = new MyArray();
> +
> +var_dump(array_key_exists("test", $a));
+?>>
> +--EXPECT--
> +MyArray::offsetExists(test)
> +bool(true)
Best regards,
Marcus