Skip to content

Instantly share code, notes, and snippets.

@dstogov
Created March 20, 2024 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dstogov/3581cd91d42b6fce97a3c1e2870937c2 to your computer and use it in GitHub Desktop.
Save dstogov/3581cd91d42b6fce97a3c1e2870937c2 to your computer and use it in GitHub Desktop.
observer_validate_opline-01.diff
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