Skip to content

Commit 632f733

Browse files
committed
Merge branch 'PHP-5.5' of git.php.net:php-src into PHP-5.5
* 'PHP-5.5' of git.php.net:php-src: Avoid compiler warning Fix bug #65579 (Using traits with get_class_methods causes segfault).
2 parents 790db9f + e356d79 commit 632f733

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

Zend/tests/bug65579.phpt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
Bug #65579 (Using traits with get_class_methods causes segfault)
3+
--FILE--
4+
<?php
5+
trait ParentTrait {
6+
public function testMethod() { }
7+
}
8+
9+
trait ChildTrait {
10+
use ParentTrait {
11+
testMethod as testMethodFromParentTrait;
12+
}
13+
public function testMethod() { }
14+
}
15+
16+
class TestClass {
17+
use ChildTrait;
18+
}
19+
20+
$obj = new TestClass();
21+
var_dump(get_class_methods($obj));
22+
?>
23+
--EXPECT--
24+
array(2) {
25+
[0]=>
26+
string(10) "testMethod"
27+
[1]=>
28+
string(25) "testmethodfromparenttrait"
29+
}

Zend/zend_API.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3980,15 +3980,16 @@ ZEND_API const char* zend_find_alias_name(zend_class_entry *ce, const char *name
39803980
{
39813981
zend_trait_alias *alias, **alias_ptr;
39823982

3983-
alias_ptr = ce->trait_aliases;
3984-
alias = *alias_ptr;
3985-
while (alias) {
3986-
if (alias->alias_len == len &&
3987-
!strncasecmp(name, alias->alias, alias->alias_len)) {
3988-
return alias->alias;
3989-
}
3990-
alias_ptr++;
3983+
if ((alias_ptr = ce->trait_aliases)) {
39913984
alias = *alias_ptr;
3985+
while (alias) {
3986+
if (alias->alias_len == len &&
3987+
!strncasecmp(name, alias->alias, alias->alias_len)) {
3988+
return alias->alias;
3989+
}
3990+
alias_ptr++;
3991+
alias = *alias_ptr;
3992+
}
39923993
}
39933994

39943995
return name;

0 commit comments

Comments
 (0)