(execute_data: *mut sys::zend_execute_data)
| 155 | } |
| 156 | |
| 157 | unsafe extern "C" fn execute_ex(execute_data: *mut sys::zend_execute_data) { |
| 158 | unsafe { |
| 159 | let execute_data = match ExecuteData::try_from_mut_ptr(execute_data) { |
| 160 | Some(execute_data) => execute_data, |
| 161 | None => { |
| 162 | ori_execute_ex(None); |
| 163 | return; |
| 164 | } |
| 165 | }; |
| 166 | |
| 167 | let (function_name, class_name) = match get_function_and_class_name(execute_data) { |
| 168 | Ok(x) => x, |
| 169 | Err(err) => { |
| 170 | error!(?err, "get function and class name failed"); |
| 171 | ori_execute_ex(Some(execute_data)); |
| 172 | return; |
| 173 | } |
| 174 | }; |
| 175 | |
| 176 | trace!( |
| 177 | ?function_name, |
| 178 | ?class_name, |
| 179 | "execute_ex function and class name" |
| 180 | ); |
| 181 | |
| 182 | let function_name = match function_name { |
| 183 | Some(function_name) => function_name, |
| 184 | None => { |
| 185 | ori_execute_ex(Some(execute_data)); |
| 186 | return; |
| 187 | } |
| 188 | }; |
| 189 | |
| 190 | let Some((before, after)) = select_plugin_hook(class_name.as_deref(), &function_name) |
| 191 | else { |
| 192 | ori_execute_ex(Some(execute_data)); |
| 193 | return; |
| 194 | }; |
| 195 | |
| 196 | let request_id = infer_request_id(execute_data); |
| 197 | trace!( |
| 198 | ?request_id, |
| 199 | ?function_name, |
| 200 | ?class_name, |
| 201 | "execute_ex infer request id" |
| 202 | ); |
| 203 | |
| 204 | let result = catch_unwind_result(AssertUnwindSafe(|| before(request_id, execute_data))); |
| 205 | if let Err(err) = &result { |
| 206 | error!( |
| 207 | ?request_id, |
| 208 | ?function_name, |
| 209 | ?class_name, |
| 210 | ?err, |
| 211 | "before execute ex" |
| 212 | ); |
| 213 | } |
| 214 |
nothing calls this directly
no test coverage detected