diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2004-02-05 02:16:08 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2004-02-05 02:16:08 +0000 |
| commit | 157a4e289add1a3e346fa12c1235b7b22bcdf770 (patch) | |
| tree | 912f042af1e0852541129787b607bb45778c9544 | |
| parent | fac5939f42b42a8b37fde405ad862fa6105090f8 (diff) | |
| download | php-git-157a4e289add1a3e346fa12c1235b7b22bcdf770.tar.gz | |
Fixed bug #27145 (Unmangle private/protected property names before printing
then inside error messages).
| -rwxr-xr-x | Zend/tests/bug27145.phpt | 13 | ||||
| -rw-r--r-- | Zend/zend_compile.c | 10 |
2 files changed, 21 insertions, 2 deletions
diff --git a/Zend/tests/bug27145.phpt b/Zend/tests/bug27145.phpt new file mode 100755 index 0000000000..f2f6dd6378 --- /dev/null +++ b/Zend/tests/bug27145.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #27145 (Errors messages print unmangled PPP property names) +--FILE-- +<?php +class a { + protected static $v = "aa"; +} +class b extends a { + protected static $v = "bb"; +} +?> +--EXPECTF-- +Fatal error: Cannot redeclare property static protected a::$v in class b in %s on line %d
\ No newline at end of file diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 25c5a34b4a..d18bf71f73 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1859,8 +1859,11 @@ static zend_bool do_inherit_property_access_check(HashTable *target_ht, zend_pro zval **new_prop; if (zend_hash_find(ce->static_members, child_info->name, child_info->name_length+1, (void**)&new_prop) == SUCCESS) { if (Z_TYPE_PP(new_prop) != IS_NULL && Z_TYPE_PP(prop) != IS_NULL) { + char *prop_name, *tmp; + zend_unmangle_property_name(child_info->name, &tmp, &prop_name); + zend_error(E_COMPILE_ERROR, "Cannot change initial value of property static protected %s::$%s in class %s", - parent_ce->name, child_info->name, ce->name); + parent_ce->name, prop_name, ce->name); } } (*prop)->refcount++; @@ -1872,8 +1875,11 @@ static zend_bool do_inherit_property_access_check(HashTable *target_ht, zend_pro } pefree(prot_name, ce->type & ZEND_INTERNAL_CLASS); } else if (!(child_info->flags & ZEND_ACC_PRIVATE) && (child_info->flags & ZEND_ACC_STATIC)) { + char *prop_name, *tmp; + + zend_unmangle_property_name(child_info->name, &tmp, &prop_name); zend_error(E_COMPILE_ERROR, "Cannot redeclare property static %s %s::$%s in class %s", - zend_visibility_string(child_info->flags), parent_ce->name, child_info->name, ce->name); + zend_visibility_string(child_info->flags), parent_ce->name, prop_name, ce->name); } return 0; /* Don't copy from parent */ } else { |
