]> granicus.if.org Git - php/commitdiff
change fcall and statement handlers to accept frame
authorJoe Watkins <krakjoe@php.net>
Wed, 4 May 2016 08:25:59 +0000 (09:25 +0100)
committerJoe Watkins <krakjoe@php.net>
Wed, 4 May 2016 08:28:13 +0000 (09:28 +0100)
NEWS
Zend/zend_execute.c
Zend/zend_extensions.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/NEWS b/NEWS
index ab5b8b678d51ac4426efdfd9db929940e35dca62..1cdb248a7f2bd729685b09a453da1f614b254afc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ PHP                                                                        NEWS
 ?? ??? 2016, PHP 7.1.0
 
 - Core:
+  . Change statement and fcall extension handlers to accept frame. (Joe)
   . Implemented safe execution timeout handling, that prevents rundom crashes
     after "Maximum execution time exceeded" error. (Dmitry)
   . Fixed bug #62210 (Exceptions can leak temporary variables). (Dmitry, Bob)
index 8213164d24d7f29a63042f2e4d4b25eca2969934..eb685e81041ce1a7e6fc4ef03ba4498c02658e74 100644 (file)
@@ -65,9 +65,9 @@ typedef int (ZEND_FASTCALL *incdec_t)(zval *);
 #define get_obj_zval_ptr_ptr(op_type, node, ex, should_free, type) _get_obj_zval_ptr_ptr(op_type, node, ex, should_free, type)
 
 /* Prototypes */
-static void zend_extension_statement_handler(const zend_extension *extension, zend_op_array *op_array);
-static void zend_extension_fcall_begin_handler(const zend_extension *extension, zend_op_array *op_array);
-static void zend_extension_fcall_end_handler(const zend_extension *extension, zend_op_array *op_array);
+static void zend_extension_statement_handler(const zend_extension *extension, zend_execute_data *frame);
+static void zend_extension_fcall_begin_handler(const zend_extension *extension, zend_execute_data *frame);
+static void zend_extension_fcall_end_handler(const zend_extension *extension, zend_execute_data *frame);
 
 #define RETURN_VALUE_USED(opline) ((opline)->result_type != IS_UNUSED)
 
@@ -1508,26 +1508,26 @@ static zend_never_inline void zend_assign_op_overloaded_property(zval *object, z
 }
 
 /* Utility Functions for Extensions */
-static void zend_extension_statement_handler(const zend_extension *extension, zend_op_array *op_array)
+static void zend_extension_statement_handler(const zend_extension *extension, zend_execute_data *frame)
 {
        if (extension->statement_handler) {
-               extension->statement_handler(op_array);
+               extension->statement_handler(frame);
        }
 }
 
 
-static void zend_extension_fcall_begin_handler(const zend_extension *extension, zend_op_array *op_array)
+static void zend_extension_fcall_begin_handler(const zend_extension *extension, zend_execute_data *frame)
 {
        if (extension->fcall_begin_handler) {
-               extension->fcall_begin_handler(op_array);
+               extension->fcall_begin_handler(frame);
        }
 }
 
 
-static void zend_extension_fcall_end_handler(const zend_extension *extension, zend_op_array *op_array)
+static void zend_extension_fcall_end_handler(const zend_extension *extension, zend_execute_data *frame)
 {
        if (extension->fcall_end_handler) {
-               extension->fcall_end_handler(op_array);
+               extension->fcall_end_handler(frame);
        }
 }
 
index a0e570a7ae61a7bb48efde238aee68992033daa3..862c18ad750e944080aea3b49f5c406d2803478d 100644 (file)
@@ -67,9 +67,9 @@ typedef void (*message_handler_func_t)(int message, void *arg);
 
 typedef void (*op_array_handler_func_t)(zend_op_array *op_array);
 
-typedef void (*statement_handler_func_t)(zend_op_array *op_array);
-typedef void (*fcall_begin_handler_func_t)(zend_op_array *op_array);
-typedef void (*fcall_end_handler_func_t)(zend_op_array *op_array);
+typedef void (*statement_handler_func_t)(zend_execute_data *frame);
+typedef void (*fcall_begin_handler_func_t)(zend_execute_data *frame);
+typedef void (*fcall_end_handler_func_t)(zend_execute_data *frame);
 
 typedef void (*op_array_ctor_func_t)(zend_op_array *op_array);
 typedef void (*op_array_dtor_func_t)(zend_op_array *op_array);
index afd0b1a3981e2d2fd700ec739f8b93ef0826826e..791b6feceacf477afcbb53b9dd9b6178446b22dc 100644 (file)
@@ -6796,7 +6796,7 @@ ZEND_VM_HANDLER(101, ZEND_EXT_STMT, ANY, ANY)
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -6808,7 +6808,7 @@ ZEND_VM_HANDLER(102, ZEND_EXT_FCALL_BEGIN, ANY, ANY)
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -6820,7 +6820,7 @@ ZEND_VM_HANDLER(103, ZEND_EXT_FCALL_END, ANY, ANY)
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
index 9a74e53e296b0be2d7695fb489a391bc951424ae..273b2cb55567ed88efa63e9966e16441b1035171 100644 (file)
@@ -1534,7 +1534,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPC
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -1546,7 +1546,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(Z
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();
@@ -1558,7 +1558,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEN
 
        if (!EG(no_extensions)) {
                SAVE_OPLINE();
-               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(func));
+               zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
                ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        }
        ZEND_VM_NEXT_OPCODE();