Bug #66331 [Com]: ZEND_SEND_PREFER_REF issue trying to overlad

From: Date: Fri, 20 Dec 2013 19:29:58 +0000
Subject: Bug #66331 [Com]: ZEND_SEND_PREFER_REF issue trying to overlad
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-183425@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66331&edit=1 ID: 66331 Comment by: krakjoe@php.net Reported by: remi@php.net Summary: ZEND_SEND_PREFER_REF issue trying to overlad Status: Open Type: Bug Package: *General Issues Operating System: irrevelant PHP Version: 5.5.7 Block user comment: N Private report: N New Comment: the patch is correct, what is not correct is the arg info in memcached extension. however, it is not currently possible to write the arginfo with the current macros, the correct arginfo as it is expected is: ZEND_BEGIN_ARG_INFO_EX(arginfo_get, 0, 0, 1) ZEND_ARG_INFO(0, key) { "cache_cb", sizeof("cache_cb")-1, NULL, 0, 0, 1, 0}, { "cas_token", sizeof("cas_token")-1, NULL, 0, 0, 1, 2}, { "udf_flags", sizeof("udf_flags")-1, NULL, 0, 0, 1, 2} ZEND_END_ARG_INFO() To hide the symptoms is not enough, the arg_info must reflect what is actually required, it should be parsed, and have a way to be specified in C correctly. Previous Comments: ------------------------------------------------------------------------ [2013-12-20 17:59:57] remi@php.net @krackjoe, thanks, but with your patch applied on 5.5.7, this doesn't change the result of provided case. A simple fix, see "pass-by-ref-proto-check.patch" just make zend_do_perform_implementation_check a little less strict, and consider pass_by_reference as a boolean (so consider 1 and 2 as equivalent, for the proto check). ------------------------------------------------------------------------ [2013-12-20 17:56:24] remi@php.net The following patch has been added/updated: Patch Name: pass-by-ref-proto-check.patch Revision: 1387562184 URL: https://bugs.php.net/patch-display.php?bug=66331&patch=pass-by-ref-proto-check.patch&revision=1387562184 ------------------------------------------------------------------------ [2013-12-20 17:04:12] rdlowrey@php.net Just tested krakjoe's patch -- works for me. ------------------------------------------------------------------------ [2013-12-20 16:06:30] krakjoe@php.net The following patch has been added/updated: Patch Name: pass-by-ref-recv-init.patch Revision: 1387555590 URL: https://bugs.php.net/patch-display.php?bug=66331&patch=pass-by-ref-recv-init.patch&revision=1387555590 ------------------------------------------------------------------------ [2013-12-20 14:46:52] remi@php.net Description: ------------ When trying to overload a class, with function where parameters have ZEND_SEND_PREFER_REF Ex : Memcached::get() in version 2.2.0b1 ZEND_BEGIN_ARG_INFO_EX(arginfo_get, 0, 0, 1) ZEND_ARG_INFO(0, key) ZEND_ARG_INFO(0, cache_cb) ZEND_ARG_INFO(2, cas_token) ZEND_ARG_INFO(1, udf_flags) ZEND_END_ARG_INFO() Real use case: try to mock the class using PHPUnit for test suite. See https://github.com/symfony/symfony/issues/9797 Test script: --------------- <?php class MyMemcached extends memcached { public function get($key, $cache_cb = NULL, &$cas_token = NULL, &$udf_flags = NULL) { } } Expected result: ---------------- No error. Actual result: -------------- Strict standards: Declaration of MyMemcached::get() should be compatible with Memcached::get($key, $cache_cb = NULL, &$cas_token = NULL, &$udf_flags = NULL) in /tmp/foo.php on line 5 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=66331&edit=1

« previous php.bugs (#183425) next »