Skip to content

Commit fd304ca

Browse files
mvorisekondrejmirtes
authored andcommitted
Drop wrong float comparison for filter_var()
1 parent ae53f11 commit fd304ca

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

src/Type/Php/FilterFunctionReturnTypeHelper.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
use function octdec;
3333
use function preg_match;
3434
use function sprintf;
35-
use const PHP_FLOAT_EPSILON;
3635

3736
final class FilterFunctionReturnTypeHelper
3837
{
@@ -293,7 +292,7 @@ private function determineExactType(Type $in, int $filterValue, Type $defaultTyp
293292
}
294293

295294
if ($in instanceof ConstantFloatType) {
296-
return $in->getValue() - (int) $in->getValue() <= PHP_FLOAT_EPSILON
295+
return $in->getValue() - (int) $in->getValue() === 0.0
297296
? $in->toInteger()
298297
: $defaultType;
299298
}

tests/PHPStan/Analyser/nsrt/filter-var.php

+8
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,14 @@ public function scalars(bool $bool, float $float, int $int, string $string, int
106106
assertType('bool|null', filter_var($float, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
107107
assertType('bool|null', filter_var(17.0, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
108108
assertType('bool|null', filter_var(17.1, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
109+
assertType('bool|null', filter_var(1e-50, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
109110
assertType('bool|null', filter_var($int, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
110111
assertType('bool|null', filter_var($intRange, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
111112
assertType('bool|null', filter_var(17, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
112113
assertType('bool|null', filter_var($string, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
113114
assertType('bool|null', filter_var($nonEmptyString, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
114115
assertType('bool|null', filter_var('17', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
116+
assertType('bool|null', filter_var('17.0', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
115117
assertType('bool|null', filter_var('17.1', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)); // could be null
116118
assertType('null', filter_var(null, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
117119

@@ -121,12 +123,14 @@ public function scalars(bool $bool, float $float, int $int, string $string, int
121123
assertType('float', filter_var($float, FILTER_VALIDATE_FLOAT));
122124
assertType('17.0', filter_var(17.0, FILTER_VALIDATE_FLOAT));
123125
assertType('17.1', filter_var(17.1, FILTER_VALIDATE_FLOAT));
126+
assertType('1.0E-50', filter_var(1e-50, FILTER_VALIDATE_FLOAT));
124127
assertType('float', filter_var($int, FILTER_VALIDATE_FLOAT));
125128
assertType('float', filter_var($intRange, FILTER_VALIDATE_FLOAT));
126129
assertType('17.0', filter_var(17, FILTER_VALIDATE_FLOAT));
127130
assertType('float|false', filter_var($string, FILTER_VALIDATE_FLOAT));
128131
assertType('float|false', filter_var($nonEmptyString, FILTER_VALIDATE_FLOAT));
129132
assertType('float|false', filter_var('17', FILTER_VALIDATE_FLOAT)); // could be 17.0
133+
assertType('float|false', filter_var('17.0', FILTER_VALIDATE_FLOAT)); // could be 17.0
130134
assertType('float|false', filter_var('17.1', FILTER_VALIDATE_FLOAT)); // could be 17.1
131135
assertType('false', filter_var(null, FILTER_VALIDATE_FLOAT));
132136

@@ -136,12 +140,14 @@ public function scalars(bool $bool, float $float, int $int, string $string, int
136140
assertType('int|false', filter_var($float, FILTER_VALIDATE_INT));
137141
assertType('17', filter_var(17.0, FILTER_VALIDATE_INT));
138142
assertType('false', filter_var(17.1, FILTER_VALIDATE_INT));
143+
assertType('false', filter_var(1e-50, FILTER_VALIDATE_INT));
139144
assertType('int', filter_var($int, FILTER_VALIDATE_INT));
140145
assertType('int<0, 9>', filter_var($intRange, FILTER_VALIDATE_INT));
141146
assertType('17', filter_var(17, FILTER_VALIDATE_INT));
142147
assertType('int|false', filter_var($string, FILTER_VALIDATE_INT));
143148
assertType('int|false', filter_var($nonEmptyString, FILTER_VALIDATE_INT));
144149
assertType('17', filter_var('17', FILTER_VALIDATE_INT));
150+
assertType('false', filter_var('17.0', FILTER_VALIDATE_INT));
145151
assertType('false', filter_var('17.1', FILTER_VALIDATE_INT));
146152
assertType('false', filter_var(null, FILTER_VALIDATE_INT));
147153

@@ -151,12 +157,14 @@ public function scalars(bool $bool, float $float, int $int, string $string, int
151157
assertType('numeric-string', filter_var($float));
152158
assertType("'17'", filter_var(17.0));
153159
assertType("'17.1'", filter_var(17.1));
160+
assertType("'1.0E-50'", filter_var(1e-50));
154161
assertType('numeric-string', filter_var($int));
155162
assertType('numeric-string', filter_var($intRange));
156163
assertType("'17'", filter_var(17));
157164
assertType('string', filter_var($string));
158165
assertType('non-empty-string', filter_var($nonEmptyString));
159166
assertType("'17'", filter_var('17'));
167+
assertType("'17.0'", filter_var('17.0'));
160168
assertType("'17.1'", filter_var('17.1'));
161169
assertType("''", filter_var(null));
162170
}

0 commit comments

Comments
 (0)