Skip to content

Commit 6ee5c22

Browse files
authored
Fix loose comparison between '1' and '+1'
1 parent ce28abd commit 6ee5c22

File tree

2 files changed

+82
-3
lines changed

2 files changed

+82
-3
lines changed

Diff for: src/Reflection/InitializerExprTypeResolver.php

-3
Original file line numberDiff line numberDiff line change
@@ -1370,9 +1370,6 @@ public function resolveEqualType(Type $leftType, Type $rightType): BooleanType
13701370
if (
13711371
($leftType->isEnum()->yes() && $rightType->isTrue()->no())
13721372
|| ($rightType->isEnum()->yes() && $leftType->isTrue()->no())
1373-
|| ($leftType->isString()->yes() && $rightType->isString()->yes())
1374-
|| ($leftType->isInteger()->yes() && $rightType->isInteger()->yes())
1375-
|| ($leftType->isFloat()->yes() && $rightType->isFloat()->yes())
13761373
) {
13771374
return $this->resolveIdenticalType($leftType, $rightType);
13781375
}

Diff for: tests/PHPStan/Analyser/nsrt/loose-comparisons.php

+82
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class HelloWorld
1717
* @param '1' $oneStr
1818
* @param '0' $zeroStr
1919
* @param '-1' $minusOneStr
20+
* @param '+1' $plusOneStr
2021
* @param null $null
2122
* @param array{} $emptyArr
2223
* @param 'php' $phpStr
@@ -31,6 +32,7 @@ public function sayTrue(
3132
$oneStr,
3233
$zeroStr,
3334
$minusOneStr,
35+
$plusOneStr,
3436
$null,
3537
$emptyArr,
3638
$phpStr,
@@ -45,6 +47,7 @@ public function sayTrue(
4547
assertType('true', $true == $oneStr);
4648
assertType('false', $true == $zeroStr);
4749
assertType('true', $true == $minusOneStr);
50+
assertType('true', $true == $plusOneStr);
4851
assertType('false', $true == $null);
4952
assertType('false', $true == $emptyArr);
5053
assertType('true', $true == $phpStr);
@@ -60,6 +63,7 @@ public function sayTrue(
6063
* @param '1' $oneStr
6164
* @param '0' $zeroStr
6265
* @param '-1' $minusOneStr
66+
* @param '+1' $plusOneStr
6367
* @param null $null
6468
* @param array{} $emptyArr
6569
* @param 'php' $phpStr
@@ -74,6 +78,7 @@ public function sayFalse(
7478
$oneStr,
7579
$zeroStr,
7680
$minusOneStr,
81+
$plusOneStr,
7782
$null,
7883
$emptyArr,
7984
$phpStr,
@@ -88,6 +93,7 @@ public function sayFalse(
8893
assertType('false', $false == $oneStr);
8994
assertType('true', $false == $zeroStr);
9095
assertType('false', $false == $minusOneStr);
96+
assertType('false', $false == $plusOneStr);
9197
assertType('true', $false == $null);
9298
assertType('true', $false == $emptyArr);
9399
assertType('false', $false == $phpStr);
@@ -103,6 +109,7 @@ public function sayFalse(
103109
* @param '1' $oneStr
104110
* @param '0' $zeroStr
105111
* @param '-1' $minusOneStr
112+
* @param '+1' $plusOneStr
106113
* @param null $null
107114
* @param array{} $emptyArr
108115
* @param 'php' $phpStr
@@ -117,6 +124,7 @@ public function sayOne(
117124
$oneStr,
118125
$zeroStr,
119126
$minusOneStr,
127+
$plusOneStr,
120128
$null,
121129
$emptyArr,
122130
$phpStr,
@@ -131,6 +139,7 @@ public function sayOne(
131139
assertType('true', $one == $oneStr);
132140
assertType('false', $one == $zeroStr);
133141
assertType('false', $one == $minusOneStr);
142+
assertType('true', $one == $plusOneStr);
134143
assertType('false', $one == $null);
135144
assertType('false', $one == $emptyArr);
136145
assertType('false', $one == $phpStr);
@@ -146,6 +155,7 @@ public function sayOne(
146155
* @param '1' $oneStr
147156
* @param '0' $zeroStr
148157
* @param '-1' $minusOneStr
158+
* @param '+1' $plusOneStr
149159
* @param null $null
150160
* @param array{} $emptyArr
151161
* @param 'php' $phpStr
@@ -160,6 +170,7 @@ public function sayZero(
160170
$oneStr,
161171
$zeroStr,
162172
$minusOneStr,
173+
$plusOneStr,
163174
$null,
164175
$emptyArr,
165176
$phpStr,
@@ -174,6 +185,7 @@ public function sayZero(
174185
assertType('false', $zero == $oneStr);
175186
assertType('true', $zero == $zeroStr);
176187
assertType('false', $zero == $minusOneStr);
188+
assertType('false', $zero == $plusOneStr);
177189
assertType('true', $zero == $null);
178190
assertType('false', $zero == $emptyArr);
179191
}
@@ -187,6 +199,7 @@ public function sayZero(
187199
* @param '1' $oneStr
188200
* @param '0' $zeroStr
189201
* @param '-1' $minusOneStr
202+
* @param '+1' $plusOneStr
190203
* @param null $null
191204
* @param array{} $emptyArr
192205
* @param 'php' $phpStr
@@ -201,6 +214,7 @@ public function sayMinusOne(
201214
$oneStr,
202215
$zeroStr,
203216
$minusOneStr,
217+
$plusOneStr,
204218
$null,
205219
$emptyArr,
206220
$phpStr,
@@ -215,6 +229,7 @@ public function sayMinusOne(
215229
assertType('false', $minusOne == $oneStr);
216230
assertType('false', $minusOne == $zeroStr);
217231
assertType('true', $minusOne == $minusOneStr);
232+
assertType('false', $minusOne == $plusOneStr);
218233
assertType('false', $minusOne == $null);
219234
assertType('false', $minusOne == $emptyArr);
220235
assertType('false', $minusOne == $phpStr);
@@ -230,6 +245,7 @@ public function sayMinusOne(
230245
* @param '1' $oneStr
231246
* @param '0' $zeroStr
232247
* @param '-1' $minusOneStr
248+
* @param '+1' $plusOneStr
233249
* @param null $null
234250
* @param array{} $emptyArr
235251
* @param 'php' $phpStr
@@ -244,6 +260,7 @@ public function sayOneStr(
244260
$oneStr,
245261
$zeroStr,
246262
$minusOneStr,
263+
$plusOneStr,
247264
$null,
248265
$emptyArr,
249266
$phpStr,
@@ -258,6 +275,7 @@ public function sayOneStr(
258275
assertType('true', $oneStr == $oneStr);
259276
assertType('false', $oneStr == $zeroStr);
260277
assertType('false', $oneStr == $minusOneStr);
278+
assertType('true', $oneStr == $plusOneStr);
261279
assertType('false', $oneStr == $null);
262280
assertType('false', $oneStr == $emptyArr);
263281
assertType('false', $oneStr == $phpStr);
@@ -273,6 +291,7 @@ public function sayOneStr(
273291
* @param '1' $oneStr
274292
* @param '0' $zeroStr
275293
* @param '-1' $minusOneStr
294+
* @param '+1' $plusOneStr
276295
* @param null $null
277296
* @param array{} $emptyArr
278297
* @param 'php' $phpStr
@@ -287,6 +306,7 @@ public function sayZeroStr(
287306
$oneStr,
288307
$zeroStr,
289308
$minusOneStr,
309+
$plusOneStr,
290310
$null,
291311
$emptyArr,
292312
$phpStr,
@@ -301,6 +321,7 @@ public function sayZeroStr(
301321
assertType('false', $zeroStr == $oneStr);
302322
assertType('true', $zeroStr == $zeroStr);
303323
assertType('false', $zeroStr == $minusOneStr);
324+
assertType('false', $zeroStr == $plusOneStr);
304325
assertType('false', $zeroStr == $null);
305326
assertType('false', $zeroStr == $emptyArr);
306327
assertType('false', $zeroStr == $phpStr);
@@ -316,6 +337,7 @@ public function sayZeroStr(
316337
* @param '1' $oneStr
317338
* @param '0' $zeroStr
318339
* @param '-1' $minusOneStr
340+
* @param '+1' $plusOneStr
319341
* @param null $null
320342
* @param array{} $emptyArr
321343
* @param 'php' $phpStr
@@ -330,6 +352,7 @@ public function sayMinusOneStr(
330352
$oneStr,
331353
$zeroStr,
332354
$minusOneStr,
355+
$plusOneStr,
333356
$null,
334357
$emptyArr,
335358
$phpStr,
@@ -344,6 +367,7 @@ public function sayMinusOneStr(
344367
assertType('false', $minusOneStr == $oneStr);
345368
assertType('false', $minusOneStr == $zeroStr);
346369
assertType('true', $minusOneStr == $minusOneStr);
370+
assertType('false', $minusOneStr == $plusOneStr);
347371
assertType('false', $minusOneStr == $null);
348372
assertType('false', $minusOneStr == $emptyArr);
349373
assertType('false', $minusOneStr == $phpStr);
@@ -359,6 +383,53 @@ public function sayMinusOneStr(
359383
* @param '1' $oneStr
360384
* @param '0' $zeroStr
361385
* @param '-1' $minusOneStr
386+
* @param '+1' $plusOneStr
387+
* @param null $null
388+
* @param array{} $emptyArr
389+
* @param 'php' $phpStr
390+
* @param '' $emptyStr
391+
*/
392+
public function sayPlusOneStr(
393+
$true,
394+
$false,
395+
$one,
396+
$zero,
397+
$minusOne,
398+
$oneStr,
399+
$zeroStr,
400+
$minusOneStr,
401+
$plusOneStr,
402+
$null,
403+
$emptyArr,
404+
$phpStr,
405+
$emptyStr
406+
): void
407+
{
408+
assertType('true', $plusOneStr == $true);
409+
assertType('false', $plusOneStr == $false);
410+
assertType('true', $plusOneStr == $one);
411+
assertType('false', $plusOneStr == $zero);
412+
assertType('false', $plusOneStr == $minusOne);
413+
assertType('true', $plusOneStr == $oneStr);
414+
assertType('false', $plusOneStr == $zeroStr);
415+
assertType('false', $plusOneStr == $minusOneStr);
416+
assertType('true', $plusOneStr == $plusOneStr);
417+
assertType('false', $plusOneStr == $null);
418+
assertType('false', $plusOneStr == $emptyArr);
419+
assertType('false', $plusOneStr == $phpStr);
420+
assertType('false', $plusOneStr == $emptyStr);
421+
}
422+
423+
/**
424+
* @param true $true
425+
* @param false $false
426+
* @param 1 $one
427+
* @param 0 $zero
428+
* @param -1 $minusOne
429+
* @param '1' $oneStr
430+
* @param '0' $zeroStr
431+
* @param '-1' $minusOneStr
432+
* @param '+1' $plusOneStr
362433
* @param null $null
363434
* @param array{} $emptyArr
364435
* @param 'php' $phpStr
@@ -373,6 +444,7 @@ public function sayNull(
373444
$oneStr,
374445
$zeroStr,
375446
$minusOneStr,
447+
$plusOneStr,
376448
$null,
377449
$emptyArr,
378450
$phpStr,
@@ -387,6 +459,7 @@ public function sayNull(
387459
assertType('false', $null == $oneStr);
388460
assertType('false', $null == $zeroStr);
389461
assertType('false', $null == $minusOneStr);
462+
assertType('false', $null == $plusOneStr);
390463
assertType('true', $null == $null);
391464
assertType('true', $null == $emptyArr);
392465
assertType('false', $null == $phpStr);
@@ -402,6 +475,7 @@ public function sayNull(
402475
* @param '1' $oneStr
403476
* @param '0' $zeroStr
404477
* @param '-1' $minusOneStr
478+
* @param '+1' $plusOneStr
405479
* @param null $null
406480
* @param array{} $emptyArr
407481
* @param 'php' $phpStr
@@ -416,6 +490,7 @@ public function sayEmptyArray(
416490
$oneStr,
417491
$zeroStr,
418492
$minusOneStr,
493+
$plusOneStr,
419494
$null,
420495
$emptyArr,
421496
$phpStr,
@@ -430,6 +505,7 @@ public function sayEmptyArray(
430505
assertType('false', $emptyArr == $oneStr);
431506
assertType('false', $emptyArr == $zeroStr);
432507
assertType('false', $emptyArr == $minusOneStr);
508+
assertType('false', $emptyArr == $plusOneStr);
433509
assertType('true', $emptyArr == $null);
434510
assertType('true', $emptyArr == $emptyArr);
435511
assertType('false', $emptyArr == $phpStr);
@@ -445,6 +521,7 @@ public function sayEmptyArray(
445521
* @param '1' $oneStr
446522
* @param '0' $zeroStr
447523
* @param '-1' $minusOneStr
524+
* @param '+1' $plusOneStr
448525
* @param null $null
449526
* @param array{} $emptyArr
450527
* @param 'php' $phpStr
@@ -459,6 +536,7 @@ public function sayNonFalsyStr(
459536
$oneStr,
460537
$zeroStr,
461538
$minusOneStr,
539+
$plusOneStr,
462540
$null,
463541
$emptyArr,
464542
$phpStr,
@@ -472,6 +550,7 @@ public function sayNonFalsyStr(
472550
assertType('false', $phpStr == $oneStr);
473551
assertType('false', $phpStr == $zeroStr);
474552
assertType('false', $phpStr == $minusOneStr);
553+
assertType('false', $phpStr == $plusOneStr);
475554
assertType('false', $phpStr == $null);
476555
assertType('false', $phpStr == $emptyArr);
477556
assertType('true', $phpStr == $phpStr);
@@ -487,6 +566,7 @@ public function sayNonFalsyStr(
487566
* @param '1' $oneStr
488567
* @param '0' $zeroStr
489568
* @param '-1' $minusOneStr
569+
* @param '+1' $plusOneStr
490570
* @param null $null
491571
* @param array{} $emptyArr
492572
* @param 'php' $phpStr
@@ -501,6 +581,7 @@ public function sayEmptyStr(
501581
$oneStr,
502582
$zeroStr,
503583
$minusOneStr,
584+
$plusOneStr,
504585
$null,
505586
$emptyArr,
506587
$phpStr,
@@ -514,6 +595,7 @@ public function sayEmptyStr(
514595
assertType('false', $emptyStr == $oneStr);
515596
assertType('false', $emptyStr == $zeroStr);
516597
assertType('false', $emptyStr == $minusOneStr);
598+
assertType('false', $emptyStr == $plusOneStr);
517599
assertType('true', $emptyStr == $null);
518600
assertType('false', $emptyStr == $emptyArr);
519601
assertType('false', $emptyStr == $phpStr);

0 commit comments

Comments
 (0)