summaryrefslogtreecommitdiff
path: root/Zend/zend_compile.c
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2015-08-18 16:37:38 +0100
committerJoe Watkins <krakjoe@php.net>2015-08-18 16:37:38 +0100
commit784dd715e4971d8c1b7d3b136716f7118bb880fa (patch)
tree1aaf6e4ee9d48ad07216bc81d5a9c013210ad62d /Zend/zend_compile.c
parent8acda9cad515d3b899bccf35762c38c36d5535ed (diff)
parentde5d4d7b420adbee043fd3272d7c6d4949b095ea (diff)
downloadphp-git-784dd715e4971d8c1b7d3b136716f7118bb880fa.tar.gz
Fix mangled property names on anon classes
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r--Zend/zend_compile.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index b795f39de8..e63875cbfc 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -1197,6 +1197,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;
@@ -1227,6 +1228,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;