From 18a99796ada958860506c485728b40aeebc46f52 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sat, 17 Dec 2005 15:51:52 +0000 Subject: [PATCH] - MFH Fix Bug #35720 A final constructor can be overwritten --- Zend/zend_compile.c | 6 ++++++ tests/classes/final_ctor1.phpt | 29 +++++++++++++++++++++++++++++ tests/classes/final_ctor2.phpt | 29 +++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100755 tests/classes/final_ctor1.phpt create mode 100755 tests/classes/final_ctor2.phpt diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index f9257698fd..b8153857e7 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1841,6 +1841,12 @@ static void do_inherit_parent_constructor(zend_class_entry *ce) ce->destructor = ce->parent->destructor; } if (ce->constructor) { + if (ce->parent->constructor && ce->parent->constructor->common.fn_flags & ZEND_ACC_FINAL) { + zend_error(E_ERROR, "Cannot override final %s::%s() with %s::%s()", + ce->parent->name, ce->parent->constructor->common.function_name, + ce->name, ce->constructor->common.function_name + ); + } return; } diff --git a/tests/classes/final_ctor1.phpt b/tests/classes/final_ctor1.phpt new file mode 100755 index 0000000000..ebfa08081e --- /dev/null +++ b/tests/classes/final_ctor1.phpt @@ -0,0 +1,29 @@ +--TEST-- +ZE2 cannot override final __construct +--FILE-- + +--EXPECTF-- + +Fatal error: Cannot override final Base::__construct() with Extended::Extended() in %sfinal_ctor1.php on line %d diff --git a/tests/classes/final_ctor2.phpt b/tests/classes/final_ctor2.phpt new file mode 100755 index 0000000000..905337b408 --- /dev/null +++ b/tests/classes/final_ctor2.phpt @@ -0,0 +1,29 @@ +--TEST-- +ZE2 cannot override final old style ctor +--FILE-- + +--EXPECTF-- + +Fatal error: Cannot override final Base::Base() with Extended::__construct() in %sfinal_ctor2.php on line %d -- 2.50.1