From dbca5f07b046cfe5114dd9379734db9735eb48da Mon Sep 17 00:00:00 2001 From: Xuefer Date: Sun, 8 Oct 2006 06:46:14 +0000 Subject: [PATCH] fixed #45, more robust xc_coverager_get_op_array_size_no_tail git-svn-id: svn://svn.lighttpd.net/xcache/trunk@228 c26eb9a1-5813-0410-bd6c-c2e55f420ca7 --- coverager.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/coverager.c b/coverager.c index 9b79155..d0ddb99 100644 --- a/coverager.c +++ b/coverager.c @@ -395,20 +395,21 @@ static int xc_coverager_get_op_array_size_no_tail(zend_op_array *op_array) /* {{ zend_uint size; size = op_array->size; -#ifdef ZEND_ENGINE_2 - if (op_array->opcodes[size - 1].opcode == ZEND_HANDLE_EXCEPTION) { - size --; + do { +next_op: + if (size == 0) { + break; + } + switch (op_array->opcodes[size - 1].opcode) { +#ifdef ZEND_HANDLE_EXCEPTION + case ZEND_HANDLE_EXCEPTION: #endif - if (op_array->opcodes[size - 1].opcode == ZEND_RETURN) { - size --; - /* it's not real php statement */ - if (op_array->opcodes[size - 1].opcode == ZEND_EXT_STMT) { + case ZEND_RETURN: + case ZEND_EXT_STMT: size --; - } - } -#ifdef ZEND_ENGINE_2 - } -#endif + goto next_op; + } + } while (0); return size; } /* }}} */