@@ -57,6 +57,7 @@ public static function register(): void
5757 if ($ retVal instanceof CurlHandle) {
5858 $ curlHandleToAttributes [$ retVal ] = new CurlHandleMetadata ();
5959 if (($ fullUrl = $ params [0 ] ?? null ) !== null ) {
60+ /** @psalm-suppress PossiblyNullReference */
6061 $ curlHandleToAttributes [$ retVal ]->setAttribute (TraceAttributes::URL_FULL , CurlHandleMetadata::redactUrlString ($ fullUrl ));
6162 }
6263 }
@@ -67,11 +68,12 @@ public static function register(): void
6768 null ,
6869 'curl_setopt ' ,
6970 pre: null ,
70- post: static function ($ obj , array $ params , mixed $ retVal ) use ($ curlHandleToAttributes , &$ curlSetOptInstrumentationSuppressed ) {
71+ post: static function ($ _obj , array $ params , mixed $ retVal ) use ($ curlHandleToAttributes , &$ curlSetOptInstrumentationSuppressed ) {
7172 if ($ retVal != true || $ curlSetOptInstrumentationSuppressed ) {
7273 return ;
7374 }
7475
76+ /** @psalm-suppress PossiblyNullReference */
7577 $ curlHandleToAttributes [$ params [0 ]]->updateFromCurlOption ($ params [1 ], $ params [2 ]);
7678 }
7779 );
@@ -80,7 +82,7 @@ public static function register(): void
8082 null ,
8183 'curl_setopt_array ' ,
8284 pre: null ,
83- post: static function ($ obj , array $ params , mixed $ retVal ) use ($ curlHandleToAttributes ) {
85+ post: static function ($ _obj , array $ params , mixed $ retVal ) use ($ curlHandleToAttributes ) {
8486 if ($ retVal != true ) {
8587 if (curl_error ($ params [0 ])) {
8688 foreach ($ params [1 ] as $ option => $ value ) {
@@ -94,6 +96,7 @@ public static function register(): void
9496 }
9597
9698 foreach ($ params [1 ] as $ option => $ value ) {
99+ /** @psalm-suppress PossiblyNullReference */
97100 $ curlHandleToAttributes [$ params [0 ]]->updateFromCurlOption ($ option , $ value );
98101 }
99102 }
@@ -116,6 +119,9 @@ public static function register(): void
116119 pre: null ,
117120 post: static function ($ obj , array $ params , mixed $ retVal ) use ($ curlHandleToAttributes ) {
118121 if ($ params [0 ] instanceof CurlHandle && $ retVal instanceof CurlHandle) {
122+ /** @psalm-suppress PossiblyNullReference
123+ * @psalm-suppress PossiblyNullArgument
124+ */
119125 $ curlHandleToAttributes [$ retVal ] = $ curlHandleToAttributes [$ params [0 ]];
120126 }
121127 }
@@ -140,11 +146,13 @@ public static function register(): void
140146 return ;
141147 }
142148
149+ /** @psalm-suppress PossiblyNullReference */
143150 $ spanName = $ curlHandleToAttributes [$ params [0 ]]->getAttributes ()[TraceAttributes::HTTP_REQUEST_METHOD ] ?? 'curl_exec ' ;
144151
145152 $ propagator = Globals::propagator ();
146153 $ parent = Context::getCurrent ();
147154
155+ /** @psalm-suppress PossiblyNullReference */
148156 $ builder = $ instrumentation ->tracer ()
149157 ->spanBuilder ($ spanName )
150158 ->setParent ($ parent )
@@ -162,15 +170,19 @@ public static function register(): void
162170
163171 $ curlSetOptInstrumentationSuppressed = true ;
164172
173+ /** @psalm-suppress PossiblyNullReference */
165174 $ headers = $ curlHandleToAttributes [$ params [0 ]]->getRequestHeadersToSend ();
166175 if ($ headers ) {
167176 curl_setopt ($ params [0 ], CURLOPT_HTTPHEADER , $ headers );
168177 }
169178
170179 if (self ::isResponseHeadersCapturingEnabled ()) {
180+ /** @psalm-suppress PossiblyNullReference */
171181 curl_setopt ($ params [0 ], CURLOPT_HEADERFUNCTION , $ curlHandleToAttributes [$ params [0 ]]->getResponseHeaderCaptureFunction ());
172182 }
183+
173184 if (self ::isRequestHeadersCapturingEnabled ()) {
185+ /** @psalm-suppress PossiblyNullReference */
174186 if (!$ curlHandleToAttributes [$ params [0 ]]->isVerboseEnabled ()) { // we let go of captuing request headers because CURLINFO_HEADER_OUT is disabling CURLOPT_VERBOSE
175187 curl_setopt ($ params [0 ], CURLINFO_HEADER_OUT , true );
176188 }
@@ -204,6 +216,7 @@ public static function register(): void
204216 $ span ->setAttribute (TraceAttributes::ERROR_TYPE , 'cURL error ( ' . $ errno . ') ' );
205217 }
206218
219+ /** @psalm-suppress PossiblyNullReference */
207220 $ capturedHeaders = $ curlHandleToAttributes [$ params [0 ]]->getCapturedResponseHeaders ();
208221 foreach (self ::getResponseHeadersToCapture () as $ headerToCapture ) {
209222 if (($ value = $ capturedHeaders [strtolower ($ headerToCapture )] ?? null ) != null ) {
@@ -233,6 +246,7 @@ public static function register(): void
233246 pre: null ,
234247 post: static function ($ obj , array $ params , mixed $ retVal ) use ($ curlMultiToHandle ) {
235248 if ($ retVal == 0 ) {
249+ /** @psalm-suppress PossiblyNullArrayAssignment */
236250 $ curlMultiToHandle [$ params [0 ]]['handles ' ][$ params [1 ]] = ['finished ' => false , 'span ' => null ];
237251 }
238252 }
@@ -245,6 +259,9 @@ public static function register(): void
245259 pre: null ,
246260 post: static function ($ obj , array $ params , mixed $ retVal ) use ($ curlMultiToHandle ) {
247261 if ($ retVal == 0 ) {
262+ /** @psalm-suppress PossiblyNullArrayAccess
263+ * @psalm-suppress PossiblyNullReference
264+ */
248265 $ curlMultiToHandle [$ params [0 ]]['handles ' ]->offsetUnset ($ params [1 ]);
249266 }
250267 }
@@ -271,14 +288,19 @@ public static function register(): void
271288 if ($ retVal == CURLM_OK ) {
272289 $ mHandle = &$ curlMultiToHandle [$ params [0 ]];
273290
291+ /** @psalm-suppress PossiblyNullArrayAccess */
274292 $ handles = &$ mHandle ['handles ' ];
275293
294+ /** @psalm-suppress PossiblyNullArrayAccess */
276295 if (!$ mHandle ['started ' ]) { // on first call to curl_multi_exec we're marking it's a transfer start for all curl handles attached to multi handle
277296 $ parent = Context::getCurrent ();
278297 $ propagator = Globals::propagator ();
279298
299+ /** @psalm-suppress PossiblyNullIterator */
280300 foreach ($ handles as $ cHandle => &$ metadata ) {
301+ /** @psalm-suppress PossiblyNullReference */
281302 $ spanName = $ curlHandleToAttributes [$ cHandle ]->getAttributes ()[TraceAttributes::HTTP_REQUEST_METHOD ] ?? 'curl_multi_exec ' ;
303+ /** @psalm-suppress PossiblyNullReference */
282304 $ builder = $ instrumentation ->tracer ()
283305 ->spanBuilder ($ spanName )
284306 ->setParent ($ parent )
@@ -304,8 +326,6 @@ public static function register(): void
304326 if (!$ curlHandleToAttributes [$ cHandle ]->isVerboseEnabled ()) { // we let go of captuing request headers because CURLINFO_HEADER_OUT is disabling CURLOPT_VERBOSE
305327 curl_setopt ($ cHandle , CURLINFO_HEADER_OUT , true );
306328 }
307- //TODO log?
308-
309329 }
310330 $ curlSetOptInstrumentationSuppressed = false ;
311331
@@ -317,6 +337,7 @@ public static function register(): void
317337 $ isRunning = $ params [1 ];
318338 if ($ isRunning == 0 ) {
319339 // it is the last call to multi - in case curl_multi_info_read might not not be called anytime, we need to finish all spans left
340+ /** @psalm-suppress PossiblyNullIterator */
320341 foreach ($ handles as $ cHandle => &$ metadata ) {
321342 if ($ metadata ['finished ' ] == false ) {
322343 $ metadata ['finished ' ] = true ;
@@ -344,15 +365,21 @@ public static function register(): void
344365
345366 if ($ retVal != false ) {
346367 if ($ retVal ['msg ' ] == CURLMSG_DONE ) {
368+ /** @psalm-suppress PossiblyNullArrayAccess
369+ * @psalm-suppress PossiblyNullReference
370+ */
347371 if (!$ mHandle ['handles ' ]->offsetExists ($ retVal ['handle ' ])) {
348372 return ;
349373 }
350374
375+ /** @psalm-suppress PossiblyNullArrayAccess */
351376 $ currentHandle = &$ mHandle ['handles ' ][$ retVal ['handle ' ]];
377+ /** @psalm-suppress PossiblyNullArrayAccess */
352378 if ($ currentHandle ['finished ' ]) {
353379 return ;
354380 }
355381
382+ /** @psalm-suppress PossiblyNullArrayAccess */
356383 $ currentHandle ['finished ' ] = true ;
357384 self ::finishMultiSpan ($ retVal ['result ' ], $ retVal ['handle ' ], $ curlHandleToAttributes , $ currentHandle ['span ' ]->get ());
358385 }
0 commit comments