(
execute_data: *mut sys::zend_execute_data, return_value: *mut sys::zval,
)
| 68 | None; |
| 69 | |
| 70 | unsafe extern "C" fn execute_internal( |
| 71 | execute_data: *mut sys::zend_execute_data, return_value: *mut sys::zval, |
| 72 | ) { |
| 73 | unsafe { |
| 74 | let (execute_data, return_value) = match ( |
| 75 | ExecuteData::try_from_mut_ptr(execute_data), |
| 76 | ZVal::try_from_mut_ptr(return_value), |
| 77 | ) { |
| 78 | (Some(execute_data), Some(return_value)) => (execute_data, return_value), |
| 79 | (execute_data, return_value) => { |
| 80 | ori_execute_internal(execute_data, return_value); |
| 81 | return; |
| 82 | } |
| 83 | }; |
| 84 | |
| 85 | let (function_name, class_name) = match get_function_and_class_name(execute_data) { |
| 86 | Ok(x) => x, |
| 87 | Err(err) => { |
| 88 | error!(?err, "get function and class name failed"); |
| 89 | ori_execute_internal(Some(execute_data), Some(return_value)); |
| 90 | return; |
| 91 | } |
| 92 | }; |
| 93 | |
| 94 | trace!( |
| 95 | ?function_name, |
| 96 | ?class_name, |
| 97 | "execute_internal function and class name" |
| 98 | ); |
| 99 | |
| 100 | let function_name = match function_name { |
| 101 | Some(function_name) => function_name, |
| 102 | None => { |
| 103 | ori_execute_internal(Some(execute_data), Some(return_value)); |
| 104 | return; |
| 105 | } |
| 106 | }; |
| 107 | |
| 108 | if function_name == HACK_SWOOLE_ON_REQUEST_FUNCTION_NAME { |
| 109 | ori_execute_internal(Some(execute_data), Some(return_value)); |
| 110 | return; |
| 111 | } |
| 112 | |
| 113 | let Some((before, after)) = select_plugin_hook(class_name.as_deref(), &function_name) |
| 114 | else { |
| 115 | ori_execute_internal(Some(execute_data), Some(return_value)); |
| 116 | return; |
| 117 | }; |
| 118 | |
| 119 | let request_id = infer_request_id(execute_data); |
| 120 | trace!( |
| 121 | ?request_id, |
| 122 | ?function_name, |
| 123 | ?class_name, |
| 124 | "execute_internal infer request id" |
| 125 | ); |
| 126 | |
| 127 | let result = catch_unwind_result(AssertUnwindSafe(|| before(request_id, execute_data))); |
no test coverage detected