Commit: 6d1bebfcb0ad746cd0410d403a3812853a2cd457 Author: Xinchen Hui <larue...@php.net> Thu, 23 Aug 2012 15:41:49 +0800 Parents: 64bd4551b4cf7820c2327312d3b335f9a89e8764 Branches: PHP-5.4
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=6d1bebfcb0ad746cd0410d403a3812853a2cd457 Log: Fixed bug #62358 (Segfault when using traits a lot) Bugs: https://bugs.php.net/62358 Changed paths: M NEWS A Zend/tests/bug62358.phpt M Zend/zend_compile.c Diff: diff --git a/NEWS b/NEWS index de19a20..4420988 100644 --- a/NEWS +++ b/NEWS @@ -13,7 +13,7 @@ PHP NEWS . Fixed bug #62744 (dangling pointers made by zend_disable_class). (Laruence) . Fixed bug #62716 (munmap() is called with the incorrect length). (slang...@google.com) - . Fixed bug #62460 (php binaries installed as binary.dSYM). (Reeze Xia) + . Fixed bug #62358 (Segfault when using traits a lot). (Laruence) . Fixed bug #62328 (implementing __toString and a cast to string fails) (Laruence) . Fixed bug #51363 (Fatal error raised by var_export() not caught by error @@ -28,6 +28,9 @@ PHP NEWS . Fixed bug #62852 (Unserialize invalid DateTime causes crash). (reeze....@gmail.com) +- Installation: + . Fixed bug #62460 (php binaries installed as binary.dSYM). (Reeze Xia) + - PDO: . Fixed bug #62685 (Wrong return datatype in PDO::inTransaction()). (Laruence) diff --git a/Zend/tests/bug62358.phpt b/Zend/tests/bug62358.phpt new file mode 100644 index 0000000..35d8b48 --- /dev/null +++ b/Zend/tests/bug62358.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #62358 (Segfault when using traits a lot) +--SKIPIF-- +<?php +if (getenv("USE_ZEND_ALLOC") !== "0") { + die("skip Need Zend MM enabled"); +} +?> +--FILE-- +<?php + +trait T { + public function foo() { + echo "from T"; + } +} + +interface I { + public function foo(); +} + +abstract class A implements I{ + use T; +} + +class B extends A { + public function foo($var) { + } +} +?> +--EXPECTF-- +Strict Standards: Declaration of B::foo() should be compatible with A::foo() in %sbug62358.php on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 841e1b9..21e5ca2 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3786,7 +3786,6 @@ static int zend_traits_merge_functions_to_class(zend_function *fn TSRMLS_DC, int } fn->common.scope = ce; - fn->common.prototype = prototype; if (prototype && (prototype->common.fn_flags & ZEND_ACC_IMPLEMENTED_ABSTRACT @@ -3801,11 +3800,14 @@ static int zend_traits_merge_functions_to_class(zend_function *fn TSRMLS_DC, int if (prototype) { do_inheritance_check_on_method(fn, prototype TSRMLS_CC); } + /* one more thing: make sure we properly implement an abstract method */ if (existing_fn && existing_fn->common.fn_flags & ZEND_ACC_ABSTRACT) { do_inheritance_check_on_method(fn, existing_fn TSRMLS_CC); } + fn->common.prototype = prototype; + /* delete inherited fn if the function to be added is not abstract */ if (existing_fn && existing_fn->common.scope != ce -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php