summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2004-02-05 02:16:08 +0000
committerIlia Alshanetsky <iliaa@php.net>2004-02-05 02:16:08 +0000
commit157a4e289add1a3e346fa12c1235b7b22bcdf770 (patch)
tree912f042af1e0852541129787b607bb45778c9544
parentfac5939f42b42a8b37fde405ad862fa6105090f8 (diff)
downloadphp-git-157a4e289add1a3e346fa12c1235b7b22bcdf770.tar.gz
Fixed bug #27145 (Unmangle private/protected property names before printing
then inside error messages).
-rwxr-xr-xZend/tests/bug27145.phpt13
-rw-r--r--Zend/zend_compile.c10
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 {