From: Dmitry Stogov Date: Mon, 6 Dec 2004 11:53:30 +0000 (+0000) Subject: Fixed bug #30922 (reflective functions crash PHP when interfaces extend themselves) X-Git-Tag: RELEASE_0_2~569 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c83c4e41873c355b5bb0bf73a26208413d3475a;p=php Fixed bug #30922 (reflective functions crash PHP when interfaces extend themselves) --- diff --git a/Zend/tests/bug30922.phpt b/Zend/tests/bug30922.phpt new file mode 100644 index 0000000000..24d79171be --- /dev/null +++ b/Zend/tests/bug30922.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #30922 (reflective functions crash PHP when interfaces extend themselves) +--FILE-- + +--EXPECTF-- +Fatal error: Interface RecurisiveFooFar cannot not implement itself in %sbug30922.php on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index af5ac78f23..e229091ca4 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1997,6 +1997,9 @@ static inline void do_implement_interface(zend_class_entry *ce, zend_class_entry if (!(ce->ce_flags & ZEND_ACC_INTERFACE) && iface->interface_gets_implemented && iface->interface_gets_implemented(iface, ce TSRMLS_CC) == FAILURE) { zend_error(E_CORE_ERROR, "Class %s could not implement interface %s", ce->name, iface->name); } + if (ce == iface) { + zend_error(E_ERROR, "Interface %s cannot not implement itself", ce->name); + } }