Created
March 20, 2024 14:22
-
-
Save dstogov/3581cd91d42b6fce97a3c1e2870937c2 to your computer and use it in GitHub Desktop.
observer_validate_opline-01.diff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/ext/zend_test/observer.c b/ext/zend_test/observer.c | |
index 3e870de450a..00e6aec877b 100644 | |
--- a/ext/zend_test/observer.c | |
+++ b/ext/zend_test/observer.c | |
@@ -347,6 +347,25 @@ PHP_INI_BEGIN() | |
STD_PHP_INI_BOOLEAN("zend_test.observer.execute_internal", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_execute_internal, zend_zend_test_globals, zend_test_globals) | |
PHP_INI_END() | |
+static void validate_opline_observer_begin(zend_execute_data *ex) | |
+{ | |
+ if (ZEND_USER_CODE(ex->func->type)) { | |
+ if (ex->opline) { | |
+ ZEND_ASSERT(ex->opline >= ex->func->op_array.opcodes | |
+ && ex->opline < ex->func->op_array.opcodes + ex->func->op_array.last); | |
+ } | |
+ } | |
+} | |
+ | |
+static void validate_opline_observer_end(zend_execute_data *ex, zval *rval) | |
+{ | |
+} | |
+ | |
+static zend_observer_fcall_handlers validate_opline_observer_fcall_init(zend_execute_data *ex) | |
+{ | |
+ return (zend_observer_fcall_handlers){validate_opline_observer_begin, validate_opline_observer_end}; | |
+} | |
+ | |
void zend_test_observer_init(INIT_FUNC_ARGS) | |
{ | |
// Loading via dl() not supported with the observer API | |
@@ -378,6 +397,8 @@ void zend_test_observer_init(INIT_FUNC_ARGS) | |
zend_test_prev_execute_internal = zend_execute_internal; | |
zend_execute_internal = zend_test_execute_internal; | |
} | |
+ | |
+ zend_observer_fcall_register(validate_opline_observer_fcall_init); | |
} | |
void zend_test_observer_shutdown(SHUTDOWN_FUNC_ARGS) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment