]> granicus.if.org Git - php/commitdiff
Allow property names from anonymous classes to be unmangled
authorSteven Hilder <stevehilder@yahoo.co.uk>
Thu, 6 Aug 2015 15:17:53 +0000 (15:17 +0000)
committerSteven Hilder <stevehilder@yahoo.co.uk>
Thu, 6 Aug 2015 15:18:14 +0000 (15:18 +0000)
Zend/zend_compile.c

index 8fd71d0aafee65b440fbbf1efc6528db13458ec5..146d8546af5a1d28995b961e9e757580660bc9cd 100644 (file)
@@ -1171,6 +1171,7 @@ static zend_always_inline size_t zend_strnlen(const char* s, size_t maxlen) /* {
 ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len) /* {{{ */
 {
        size_t class_name_len;
+       size_t anonclass_src_len;
 
        *class_name = NULL;
 
@@ -1201,6 +1202,10 @@ ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char
        }
 
        *class_name = ZSTR_VAL(name) + 1;
+       anonclass_src_len = zend_strnlen(*class_name + class_name_len + 1, ZSTR_LEN(name) - class_name_len - 2);
+       if (class_name_len + anonclass_src_len + 2 != ZSTR_LEN(name)) {
+               class_name_len += anonclass_src_len + 1;
+       }
        *prop_name = ZSTR_VAL(name) + class_name_len + 2;
        if (prop_len) {
                *prop_len = ZSTR_LEN(name) - class_name_len - 2;