@@ -74,6 +74,7 @@ typedef struct {
7474
7575typedef struct {
7676 dd_hook_data * hook_data ;
77+ zend_class_entry * called_scope ;
7778} dd_uhook_dynamic ;
7879
7980#if PHP_VERSION_ID < 70400
@@ -234,14 +235,14 @@ void dd_uhook_report_sandbox_error(zend_execute_data *execute_data, zend_object
234235 })
235236}
236237
237- static bool dd_uhook_call_hook (zend_execute_data * execute_data , dd_uhook_callback * callback , dd_hook_data * hook_data ) {
238+ static bool dd_uhook_call_hook (zend_execute_data * execute_data , dd_uhook_callback * callback , dd_hook_data * hook_data , zend_class_entry * scope ) {
238239 zval hook_data_zv ;
239240 ZVAL_OBJ (& hook_data_zv , & hook_data -> std );
240241
241242 zval rv ;
242243 zai_sandbox sandbox ;
243244 zai_sandbox_open (& sandbox );
244- dd_uhook_callback_ensure_scope (callback , execute_data );
245+ dd_uhook_callback_ensure_scope (callback , execute_data , scope );
245246 zend_fcall_info fci = dd_fcall_info (1 , & hook_data_zv , & rv );
246247 bool success = zai_sandbox_call (& sandbox , & fci , & callback -> fcc );
247248 if (!success || PG (last_error_message )) {
@@ -321,6 +322,7 @@ static bool dd_uhook_begin(zend_ulong invocation, zend_execute_data *execute_dat
321322 return true;
322323 }
323324
325+ dyn -> called_scope = zend_get_called_scope (execute_data );
324326 dyn -> hook_data = (dd_hook_data * )dd_hook_data_create (ddtrace_hook_data_ce );
325327 dyn -> hook_data -> returns_reference = execute_data -> func -> common .fn_flags & ZEND_ACC_RETURN_REFERENCE ;
326328 dyn -> hook_data -> vm_stack_top = EG (vm_stack_top );
@@ -356,7 +358,7 @@ static bool dd_uhook_begin(zend_ulong invocation, zend_execute_data *execute_dat
356358 LOGEV (HOOK_TRACE , dd_uhook_log_invocation (log , execute_data , "begin" , def -> begin .closure ););
357359
358360 def -> running = true;
359- dd_uhook_call_hook (execute_data , & def -> begin , dyn -> hook_data );
361+ dd_uhook_call_hook (execute_data , & def -> begin , dyn -> hook_data , dyn -> called_scope );
360362 def -> running = false;
361363 dyn -> hook_data -> retval_ptr = NULL ;
362364 }
@@ -480,7 +482,7 @@ static void dd_uhook_end(zend_ulong invocation, zend_execute_data *execute_data,
480482 def -> running = true;
481483 dyn -> hook_data -> retval_ptr = retval ;
482484 dyn -> hook_data -> execute_data = execute_data ;
483- keep_span = dd_uhook_call_hook (execute_data , & def -> end , dyn -> hook_data );
485+ keep_span = dd_uhook_call_hook (execute_data , & def -> end , dyn -> hook_data , dyn -> called_scope );
484486 dyn -> hook_data -> execute_data = NULL ;
485487 dyn -> hook_data -> retval_ptr = NULL ;
486488 def -> running = false;
0 commit comments