diff options
author | Adam Harvey <aharvey@php.net> | 2013-08-28 20:33:42 -0700 |
---|---|---|
committer | Adam Harvey <aharvey@php.net> | 2013-08-28 20:33:42 -0700 |
commit | 72027cd0848f1a5c580c601573448cdea9b095ca (patch) | |
tree | 03a5c6d9bf2a3cfe3b63dd94e49f86fdbd2ad7ad /Zend/zend_API.c | |
parent | 3745bdadc03a146fd37a3528658abc86bc8494df (diff) | |
download | php-git-72027cd0848f1a5c580c601573448cdea9b095ca.tar.gz |
Fix bug #65579 (Using traits with get_class_methods causes segfault).
Specifically, this checks if there are trait aliases defined in the class scope
before attempting to dereference the first trait alias. This handles the case
where a trait alias was used in a child trait but no aliases exist in the
concrete class.
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 90d27b7987..870a9b6480 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -3917,15 +3917,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; |