diff options
author | Dmitry Stogov <dmitry@zend.com> | 2013-08-29 10:31:50 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2013-08-29 10:31:50 +0400 |
commit | 6ff7dd05bf7fc9ac19821c59aaa09f0f826538a3 (patch) | |
tree | dea06eef2ba25286a04ecea5095e3adb7e38b220 | |
parent | b6864d978ce0692194e475dbba4189033202fd69 (diff) | |
parent | 0ea00936be03ff2bfa9579426c77634a88608f20 (diff) | |
download | php-git-6ff7dd05bf7fc9ac19821c59aaa09f0f826538a3.tar.gz |
Merge branch 'master' of git.php.net:php-src
* 'master' of git.php.net:php-src:
Avoid compiler warning
Fix bug #65579 (Using traits with get_class_methods causes segfault).
-rw-r--r-- | Zend/tests/bug65579.phpt | 29 | ||||
-rw-r--r-- | Zend/zend_API.c | 17 |
2 files changed, 38 insertions, 8 deletions
diff --git a/Zend/tests/bug65579.phpt b/Zend/tests/bug65579.phpt new file mode 100644 index 0000000000..25d74ed4f5 --- /dev/null +++ b/Zend/tests/bug65579.phpt @@ -0,0 +1,29 @@ +--TEST-- +Bug #65579 (Using traits with get_class_methods causes segfault) +--FILE-- +<?php +trait ParentTrait { + public function testMethod() { } +} + +trait ChildTrait { + use ParentTrait { + testMethod as testMethodFromParentTrait; + } + public function testMethod() { } +} + +class TestClass { + use ChildTrait; +} + +$obj = new TestClass(); +var_dump(get_class_methods($obj)); +?> +--EXPECT-- +array(2) { + [0]=> + string(10) "testMethod" + [1]=> + string(25) "testmethodfromparenttrait" +} diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 23ad158b17..7fd3a8adbb 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3980,15 +3980,16 @@ ZEND_API const char* zend_find_alias_name(zend_class_entry *ce, const char *name { zend_trait_alias *alias, **alias_ptr; - alias_ptr = ce->trait_aliases; - alias = *alias_ptr; - while (alias) { - if (alias->alias_len == len && - !strncasecmp(name, alias->alias, alias->alias_len)) { - return alias->alias; - } - alias_ptr++; + if ((alias_ptr = ce->trait_aliases)) { alias = *alias_ptr; + while (alias) { + if (alias->alias_len == len && + !strncasecmp(name, alias->alias, alias->alias_len)) { + return alias->alias; + } + alias_ptr++; + alias = *alias_ptr; + } } return name; |