From 98b8a0fdb9e2690c621b52ad6e4ca0a697921cef Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 23 Nov 2005 09:27:01 +0000 Subject: [PATCH] Bug #33732 (Wrong behavior of constants in class and interface extending) --- Zend/tests/bug33732.phpt | 45 ++++++++++++++++++++++++++++++++++++++++ Zend/zend_compile.c | 10 ++++++--- 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100755 Zend/tests/bug33732.phpt diff --git a/Zend/tests/bug33732.phpt b/Zend/tests/bug33732.phpt new file mode 100755 index 0000000000..f1e5a14956 --- /dev/null +++ b/Zend/tests/bug33732.phpt @@ -0,0 +1,45 @@ +--TEST-- +Bug #33732 (Wrong behavior of constants in class and interface extending) +--FILE-- + +--EXPECT-- +const of iA +const of iA +const of iA +const of iA2 +const of iA2 +const of iA2 +const of iA2 diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 030fc2168f..44f91c3426 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2317,10 +2317,14 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent } -static zend_bool do_inherit_constant_check(HashTable *child_constants_table, zval *parent_constant, zend_hash_key *hash_key, zend_class_entry *iface) +static zend_bool do_inherit_constant_check(HashTable *child_constants_table, zval **parent_constant, zend_hash_key *hash_key, zend_class_entry *iface) { - if (zend_u_hash_quick_exists(child_constants_table, hash_key->type, hash_key->u.string, hash_key->nKeyLength, hash_key->h)) { - zend_error(E_COMPILE_ERROR, "Cannot inherit previously-inherited constant %R from interface %v", hash_key->type, hash_key->u.string, iface->name); + zval **old_constant; + + if (zend_u_hash_quick_find(child_constants_table, hash_key->type, hash_key->u.string, hash_key->nKeyLength, hash_key->h, (void**)&old_constant) == SUCCESS) { + if (*old_constant != *parent_constant) { + zend_error(E_COMPILE_ERROR, "Cannot inherit previously-inherited constant %R from interface %v", hash_key->type, hash_key->u.string, iface->name); + } return 0; } return 1; -- 2.50.1