Skip to content

Commit e0804bb

Browse files
committed
next bunch of static analysis fixes
1 parent 2845809 commit e0804bb

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

src/Instrumentation/Curl/src/CurlInstrumentation.php

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/Instrumentation/Curl/tests/Integration/CurlInstrumentationTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace OpenTelemetry\Tests\Instrumentation\Curl\Integration;
66

77
use ArrayObject;
8+
use CurlHandle;
89
use OpenTelemetry\API\Instrumentation\Configurator;
910
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
1011
use OpenTelemetry\Context\ScopeInterface;
@@ -44,6 +45,7 @@ public function tearDown(): void
4445
public function test_curl_reset(): void
4546
{
4647
$ch = curl_init();
48+
$this->assertInstanceOf(CurlHandle::class, $ch);
4749
curl_setopt($ch, CURLOPT_POST, 1);
4850
curl_setopt($ch, CURLOPT_URL, 'http://gugugaga.gugugaga/');
4951
curl_reset($ch);
@@ -59,6 +61,7 @@ public function test_curl_reset(): void
5961
public function test_curl_setopt(): void
6062
{
6163
$ch = curl_init();
64+
$this->assertInstanceOf(CurlHandle::class, $ch);
6265
curl_setopt($ch, CURLOPT_POST, 1);
6366
curl_setopt($ch, CURLOPT_URL, 'http://gugugaga.gugugaga/');
6467
curl_exec($ch);
@@ -74,6 +77,7 @@ public function test_curl_setopt(): void
7477
public function test_curl_setopt_overrides_url(): void
7578
{
7679
$ch = curl_init('http://example.com');
80+
$this->assertInstanceOf(CurlHandle::class, $ch);
7781
curl_setopt($ch, CURLOPT_POST, 1);
7882
curl_setopt($ch, CURLOPT_URL, 'http://gugugaga.gugugaga/');
7983
curl_exec($ch);
@@ -86,6 +90,7 @@ public function test_curl_setopt_overrides_url(): void
8690
public function test_curl_setopt_array(): void
8791
{
8892
$ch = curl_init();
93+
$this->assertInstanceOf(CurlHandle::class, $ch);
8994
curl_setopt_array($ch, [CURLOPT_POST => 1, CURLOPT_URL => 'http://gugugaga.gugugaga/']);
9095
curl_exec($ch);
9196

@@ -99,6 +104,7 @@ public function test_curl_setopt_array(): void
99104
public function test_curl_setopt_array_partial_success(): void
100105
{
101106
$ch = curl_init();
107+
$this->assertInstanceOf(CurlHandle::class, $ch);
102108
curl_setopt_array($ch, [CURLOPT_POST => 1, CURLOPT_URL => 'http://gugugaga.gugugaga/', CURLOPT_SSLVERSION => 1000 ]);
103109
curl_exec($ch);
104110

@@ -112,9 +118,11 @@ public function test_curl_setopt_array_partial_success(): void
112118
public function test_curl_copy_handle(): void
113119
{
114120
$ch = curl_init('http://gugugaga.gugugaga/');
121+
$this->assertInstanceOf(CurlHandle::class, $ch);
115122
curl_setopt($ch, CURLOPT_POST, 1);
116123

117124
$ch_copy = curl_copy_handle($ch);
125+
$this->assertInstanceOf(CurlHandle::class, $ch_copy);
118126
curl_close($ch);
119127

120128
curl_exec($ch_copy);
@@ -129,6 +137,7 @@ public function test_curl_copy_handle(): void
129137
public function test_curl_exec_with_error(): void
130138
{
131139
$ch = curl_init('http://gugugaga.gugugaga/');
140+
$this->assertInstanceOf(CurlHandle::class, $ch);
132141
curl_exec($ch);
133142

134143
$this->assertCount(1, $this->storage);
@@ -144,6 +153,7 @@ public function test_curl_exec_with_error(): void
144153
public function test_curl_exec(): void
145154
{
146155
$ch = curl_init('http://example.com/');
156+
$this->assertInstanceOf(CurlHandle::class, $ch);
147157
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
148158
curl_exec($ch);
149159

@@ -163,6 +173,7 @@ public function test_curl_exec_calls_user_defined_headerfunc(): void
163173
putenv('OTEL_PHP_INSTRUMENTATION_HTTP_REQUEST_HEADERS=host');
164174

165175
$ch = curl_init('http://example.com/');
176+
$this->assertInstanceOf(CurlHandle::class, $ch);
166177
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
167178

168179
$func = function (\CurlHandle $ch, string $headerLine) {
@@ -194,6 +205,7 @@ public function test_curl_exec_headers_capturing(): void
194205
putenv('OTEL_PHP_INSTRUMENTATION_HTTP_REQUEST_HEADERS=host');
195206

196207
$ch = curl_init('http://example.com/');
208+
$this->assertInstanceOf(CurlHandle::class, $ch);
197209
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
198210

199211
curl_exec($ch);
@@ -212,6 +224,7 @@ public function test_curl_exec_sets_traceparent(): void
212224
putenv('OTEL_PHP_INSTRUMENTATION_HTTP_REQUEST_HEADERS=traceparent');
213225

214226
$ch = curl_init('http://example.com/');
227+
$this->assertInstanceOf(CurlHandle::class, $ch);
215228
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
216229

217230
curl_exec($ch);

src/Instrumentation/Curl/tests/Integration/CurlMultiInstrumentationTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace OpenTelemetry\Tests\Instrumentation\Curl\Integration;
66

77
use ArrayObject;
8+
use CurlHandle;
89
use OpenTelemetry\API\Instrumentation\Configurator;
910
use OpenTelemetry\API\Trace\Propagation\TraceContextPropagator;
1011
use OpenTelemetry\Context\ScopeInterface;
@@ -45,9 +46,11 @@ public function test_curl_multi()
4546
{
4647
$mh = curl_multi_init();
4748
$ch1 = curl_init('http://example.com/');
49+
$this->assertInstanceOf(CurlHandle::class, $ch1);
4850
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
4951

5052
$ch2 = curl_copy_handle($ch1);
53+
$this->assertInstanceOf(CurlHandle::class, $ch2);
5154

5255
curl_multi_add_handle($mh, $ch1);
5356
curl_multi_add_handle($mh, $ch2);
@@ -78,6 +81,7 @@ public function test_curl_multi_error()
7881
{
7982
$mh = curl_multi_init();
8083
$ch1 = curl_init('unknown://scheme.com/');
84+
$this->assertInstanceOf(CurlHandle::class, $ch1);
8185

8286
curl_multi_add_handle($mh, $ch1);
8387

@@ -103,6 +107,8 @@ public function test_curl_multi_remove_handle()
103107
$mh = curl_multi_init();
104108
$ch1 = curl_init('unknown://scheme.com/');
105109
$ch2 = curl_init('other://scheme.com/');
110+
$this->assertInstanceOf(CurlHandle::class, $ch1);
111+
$this->assertInstanceOf(CurlHandle::class, $ch2);
106112

107113
curl_multi_add_handle($mh, $ch1);
108114
curl_multi_add_handle($mh, $ch2);
@@ -131,6 +137,7 @@ public function test_curl_multi_exec_calls_user_defined_headerfunc(): void
131137

132138
$mh = curl_multi_init();
133139
$ch1 = curl_init('http://example.com/');
140+
$this->assertInstanceOf(CurlHandle::class, $ch1);
134141
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
135142

136143
$func = function (\CurlHandle $ch, string $headerLine) {
@@ -148,6 +155,7 @@ public function test_curl_multi_exec_calls_user_defined_headerfunc(): void
148155
curl_setopt($ch1, CURLOPT_HEADERFUNCTION, $mockedFunc);
149156

150157
$ch2 = curl_copy_handle($ch1);
158+
$this->assertInstanceOf(CurlHandle::class, $ch2);
151159

152160
curl_multi_add_handle($mh, $ch1);
153161
curl_multi_add_handle($mh, $ch2);
@@ -181,9 +189,11 @@ public function test_curl_multi_exec_headers_capturing(): void
181189

182190
$mh = curl_multi_init();
183191
$ch1 = curl_init('http://example.com/');
192+
$this->assertInstanceOf(CurlHandle::class, $ch1);
184193
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
185194

186195
$ch2 = curl_copy_handle($ch1);
196+
$this->assertInstanceOf(CurlHandle::class, $ch2);
187197

188198
curl_multi_add_handle($mh, $ch1);
189199
curl_multi_add_handle($mh, $ch2);
@@ -218,9 +228,11 @@ public function test_curl_multi_exec_sets_traceparent(): void
218228

219229
$mh = curl_multi_init();
220230
$ch1 = curl_init('http://example.com/');
231+
$this->assertInstanceOf(CurlHandle::class, $ch1);
221232
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
222233

223234
$ch2 = curl_copy_handle($ch1);
235+
$this->assertInstanceOf(CurlHandle::class, $ch2);
224236

225237
curl_multi_add_handle($mh, $ch1);
226238
curl_multi_add_handle($mh, $ch2);

0 commit comments

Comments
 (0)