]> granicus.if.org Git - php/commitdiff
Add missing call opcodes in cleanup_unfinished_calls()
authorNikita Popov <nikic@php.net>
Wed, 13 Jul 2016 21:55:19 +0000 (23:55 +0200)
committerNikita Popov <nikic@php.net>
Thu, 14 Jul 2016 16:37:28 +0000 (18:37 +0200)
Otherwise we may leak if an exception is thrown from them.

Zend/zend_execute.c

index cda98fd8a489c380483ce9f1e1f1a6acc198dc67..af90b442f002c6b722ad91588e6a0e5f50e9ad13 100644 (file)
@@ -2444,9 +2444,12 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o
                
                if (UNEXPECTED(opline->opcode == ZEND_INIT_FCALL ||
                        opline->opcode == ZEND_INIT_FCALL_BY_NAME ||
+                       opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME ||
                        opline->opcode == ZEND_INIT_DYNAMIC_CALL ||
+                       opline->opcode == ZEND_INIT_USER_CALL ||
                        opline->opcode == ZEND_INIT_METHOD_CALL ||
-                       opline->opcode == ZEND_INIT_STATIC_METHOD_CALL)) {
+                       opline->opcode == ZEND_INIT_STATIC_METHOD_CALL ||
+                       opline->opcode == ZEND_NEW)) {
                        ZEND_ASSERT(op_num);
                        opline--;
                }