Re: svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/Zend/tests/bug54910.phpt branches/PHP_5_3/Zend/zend_API.c trunk/Zend/tests/bug54910.phpt
trunk/Zend/zend_API.c
| From: | Ilia Alshanetsky | Date: | Tue, 31 May 2011 09:31:16 +0000 |
| Subject: | Re: svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/Zend/tests/bug54910.phpt branches/PHP_5_3/Zend/zend_API.c trunk/Zend/tests/bug54910.phpt trunk/Zend/zend_API.c |
||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-65065@lists.php.net to get a copy of this message | ||
Please merge into 5.4 branch as well.
Thanks
On Tue, May 31, 2011 at 11:20 AM, Dmitry Stogov <dmitry@php.net> wrote:
> dmitry Tue, 31 May 2011 09:20:51 +0000
>
> Revision:
> http://svn.php.net/viewvc?view=revision&revision=311635
>
> Log:
> Fixed bug #54910 (Crash when calling call_user_func with unknown function name)
>
> Bug: http://bugs.php.net/54910 (Assigned) Crash when calling
> call_user_func with unknown function name
>
> Changed paths:
> U php/php-src/branches/PHP_5_3/NEWS
> A php/php-src/branches/PHP_5_3/Zend/tests/bug54910.phpt
> U php/php-src/branches/PHP_5_3/Zend/zend_API.c
> A php/php-src/trunk/Zend/tests/bug54910.phpt
> U php/php-src/trunk/Zend/zend_API.c
>
> Modified: php/php-src/branches/PHP_5_3/NEWS
> ===================================================================
> --- php/php-src/branches/PHP_5_3/NEWS 2011-05-31 09:18:23 UTC (rev 311634)
> +++ php/php-src/branches/PHP_5_3/NEWS 2011-05-31 09:20:51 UTC (rev 311635)
> @@ -6,6 +6,8 @@
> - Increased the backtrack limit from 100000 to 1000000 (Rasmus)
>
> - Zend Engine:
> + . Fixed bug #54910 (Crash when calling call_user_func with unknown function
> + name). (Dmitry)
> . Fixed bug #54804 (__halt_compiler and imported namespaces).
> (Pierrick, Felipe)
> . Fixed bug #54585 (track_errors causes segfault). (Dmitry)
>
> Added: php/php-src/branches/PHP_5_3/Zend/tests/bug54910.phpt
> ===================================================================
> --- php/php-src/branches/PHP_5_3/Zend/tests/bug54910.phpt
> (rev 0)
> +++ php/php-src/branches/PHP_5_3/Zend/tests/bug54910.phpt 2011-05-31 09:20:51 UTC (rev
> 311635)
> @@ -0,0 +1,28 @@
> +--TEST--
> +Bug #54910 (Crash when calling call_user_func with unknown function name)
> +--FILE--
> +<?php
> +class A {
> + public function __call($method, $args) {
> + if (stripos($method, 'get') === 0) {
> + return $this->get();
> + }
> + die("No such method - '$method'\n");
> + }
> +
> + protected function get() {
> + $class = get_class($this);
> + $call = array($class, 'noSuchMethod');
> +
> + if (is_callable($call)) {
> + call_user_func($call);
> + }
> + }
> +}
> +
> +class B extends A {}
> +
> +$input = new B();
> +echo $input->getEmail();
> +--EXPECT--
> +No such method - 'noSuchMethod'
>
> Modified: php/php-src/branches/PHP_5_3/Zend/zend_API.c
> ===================================================================
> --- php/php-src/branches/PHP_5_3/Zend/zend_API.c 2011-05-31 09:18:23 UTC (rev
> 311634)
> +++ php/php-src/branches/PHP_5_3/Zend/zend_API.c 2011-05-31 09:20:51 UTC (rev
> 311635)
> @@ -2590,6 +2590,11 @@
> if (fcc->function_handler) {
> retval = 1;
> call_via_handler =
> (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
> + if (call_via_handler &&
> !fcc->object_ptr && EG(This) &&
> + Z_OBJ_HT_P(EG(This))->get_class_entry
> &&
> + instanceof_function(Z_OBJCE_P(EG(This)),
> fcc->calling_scope TSRMLS_CC)) {
> + fcc->object_ptr = EG(This);
> + }
> }
> }
> }
>
> Added: php/php-src/trunk/Zend/tests/bug54910.phpt
> ===================================================================
> --- php/php-src/trunk/Zend/tests/bug54910.phpt (rev 0)
> +++ php/php-src/trunk/Zend/tests/bug54910.phpt 2011-05-31 09:20:51 UTC (rev 311635)
> @@ -0,0 +1,28 @@
> +--TEST--
> +Bug #54910 (Crash when calling call_user_func with unknown function name)
> +--FILE--
> +<?php
> +class A {
> + public function __call($method, $args) {
> + if (stripos($method, 'get') === 0) {
> + return $this->get();
> + }
> + die("No such method - '$method'\n");
> + }
> +
> + protected function get() {
> + $class = get_class($this);
> + $call = array($class, 'noSuchMethod');
> +
> + if (is_callable($call)) {
> + call_user_func($call);
> + }
> + }
> +}
> +
> +class B extends A {}
> +
> +$input = new B();
> +echo $input->getEmail();
> +--EXPECT--
> +No such method - 'noSuchMethod'
>
> Modified: php/php-src/trunk/Zend/zend_API.c
> ===================================================================
> --- php/php-src/trunk/Zend/zend_API.c 2011-05-31 09:18:23 UTC (rev 311634)
> +++ php/php-src/trunk/Zend/zend_API.c 2011-05-31 09:20:51 UTC (rev 311635)
> @@ -2773,6 +2773,11 @@
> if (fcc->function_handler) {
> retval = 1;
> call_via_handler =
> (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
> + if (call_via_handler &&
> !fcc->object_ptr && EG(This) &&
> + Z_OBJ_HT_P(EG(This))->get_class_entry
> &&
> + instanceof_function(Z_OBJCE_P(EG(This)),
> fcc->calling_scope TSRMLS_CC)) {
> + fcc->object_ptr = EG(This);
> + }
> }
> }
> }
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>