From e10dbc607c49def182dc7631cf87005271bc4be7 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Wed, 16 Jul 2003 09:13:47 +0000 Subject: [PATCH] Fix bug in the verification of interface-function implementation --- Zend/zend_compile.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index dfda708646..595a27c4c5 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1676,6 +1676,7 @@ static zend_bool zend_do_perform_implementation_check(zend_function *fe) op = fe->op_array.opcodes; proto_op = fe->common.prototype->op_array.opcodes; + /* Make sure that the implementation has all of the arguments of the interface */ while (proto_op->opcode != ZEND_RAISE_ABSTRACT_ERROR) { if (proto_op->opcode != op->opcode) { return 0; @@ -1690,7 +1691,21 @@ static zend_bool zend_do_perform_implementation_check(zend_function *fe) proto_op++; op++; } - return 1; + + /* Make sure that the implementation doesn't receive more arguments than the interface */ + while (1) { + switch (op->opcode) { + case ZEND_FETCH_CLASS: + case ZEND_FETCH_W: + op++; + break; + case ZEND_RECV: + case ZEND_RECV_INIT: + return 0; + default: + return 1; + } + } } -- 2.50.1