This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace ValueParsers\Test; |
||
4 | |||
5 | use DataValues\DecimalValue; |
||
6 | use ValueParsers\DecimalParser; |
||
7 | use ValueParsers\NumberUnlocalizer; |
||
8 | |||
9 | /** |
||
10 | * @covers ValueParsers\DecimalParser |
||
11 | * |
||
12 | * @group DataValue |
||
13 | * @group DataValueExtensions |
||
14 | * |
||
15 | * @license GPL-2.0-or-later |
||
16 | * @author Daniel Kinzler |
||
17 | */ |
||
18 | class DecimalParserTest extends ValueParserTestCase { |
||
19 | |||
20 | /** |
||
21 | * @return DecimalParser |
||
22 | */ |
||
23 | protected function getInstance() { |
||
24 | $unlocalizer = $this->createMock( NumberUnlocalizer::class ); |
||
25 | $unlocalizer->method( 'unlocalizeNumber' ) |
||
0 ignored issues
–
show
|
|||
26 | ->will( $this->returnArgument( 0 ) ); |
||
27 | |||
28 | return new DecimalParser( null, $unlocalizer ); |
||
0 ignored issues
–
show
$unlocalizer is of type object<PHPUnit\Framework\MockObject\MockObject> , but the function expects a null|object<ValueParsers\NumberUnlocalizer> .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() |
|||
29 | } |
||
30 | |||
31 | /** |
||
32 | * @see ValueParserTestCase::validInputProvider |
||
33 | */ |
||
34 | public function validInputProvider() { |
||
35 | $argLists = []; |
||
36 | |||
37 | $valid = [ |
||
38 | '0' => 0, |
||
39 | '-0' => 0, |
||
40 | '-00.00' => '-0.00', |
||
41 | '+00.00' => '+0.00', |
||
42 | '0001' => 1, |
||
43 | '+42' => 42, |
||
44 | '+01' => 01, |
||
45 | '9001' => 9001, |
||
46 | '-1' => -1, |
||
47 | '-42' => -42, |
||
48 | '.5' => 0.5, |
||
49 | '-.125' => -0.125, |
||
50 | '3.' => 3, |
||
51 | ',3,' => 3, |
||
52 | '2.125' => 2.125, |
||
53 | '2.1250' => '+2.1250', |
||
54 | '2.1250e0' => '+2.1250', |
||
55 | '2.1250e3' => '+2125.0', |
||
56 | '2.1250e+3' => '+2125.0', |
||
57 | '2.1250e-2' => '+0.021250', |
||
58 | '123e+3' => '+123000', |
||
59 | '123e-2' => '+1.23', |
||
60 | '-123e-5' => '-0.00123', |
||
61 | ' 5 ' => 5, |
||
62 | '100,000' => 100000, |
||
63 | '100 000' => 100000, |
||
64 | '100\'000' => 100000, |
||
65 | |||
66 | // U+000C (form feed) |
||
67 | "5\f" => 5, |
||
68 | // U+00A0 (non-break space) |
||
69 | "5\xC2\xA0200" => 5200, |
||
70 | // U+202F (narrow no-break space) |
||
71 | "5\xE2\x80\xAF300" => 5300, |
||
72 | ]; |
||
73 | |||
74 | foreach ( $valid as $value => $expected ) { |
||
75 | // Because PHP turns them into ints using black magic |
||
76 | $value = (string)$value; |
||
77 | |||
78 | $expected = new DecimalValue( $expected ); |
||
79 | $argLists[] = [ $value, $expected ]; |
||
80 | } |
||
81 | |||
82 | return $argLists; |
||
83 | } |
||
84 | |||
85 | /** |
||
86 | * @see ValueParserTestCase::invalidInputProvider |
||
87 | */ |
||
88 | public function invalidInputProvider() { |
||
89 | $argLists = [ |
||
90 | [ true ], |
||
91 | [ false ], |
||
92 | [ null ], |
||
93 | [ 4.2 ], |
||
94 | [ [] ], |
||
95 | [ 42 ] |
||
96 | ]; |
||
97 | |||
98 | $invalid = [ |
||
99 | 'foo', |
||
100 | '', |
||
101 | '--1', |
||
102 | '1-', |
||
103 | 'one', |
||
104 | '0x20', |
||
105 | '1+1', |
||
106 | '1-1', |
||
107 | '1.2.3', |
||
108 | ]; |
||
109 | |||
110 | foreach ( $invalid as $value ) { |
||
111 | $argLists[] = [ $value ]; |
||
112 | } |
||
113 | |||
114 | return $argLists; |
||
115 | } |
||
116 | |||
117 | public function testUnlocalization() { |
||
118 | $unlocalizer = $this->createMock( NumberUnlocalizer::class ); |
||
119 | |||
120 | $unlocalizer->expects( $this->once() ) |
||
121 | ->method( 'unlocalizeNumber' ) |
||
122 | ->will( $this->returnCallback( function ( $number ) { |
||
123 | return str_replace( '#', '', $number ); |
||
124 | } ) ); |
||
125 | |||
126 | $unlocalizer->expects( $this->never() ) |
||
127 | ->method( 'getNumberRegex' ); |
||
128 | |||
129 | $unlocalizer->expects( $this->never() ) |
||
130 | ->method( 'getUnitRegex' ); |
||
131 | |||
132 | $parser = new DecimalParser( null, $unlocalizer ); |
||
0 ignored issues
–
show
$unlocalizer is of type object<PHPUnit\Framework\MockObject\MockObject> , but the function expects a null|object<ValueParsers\NumberUnlocalizer> .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
![]() |
|||
133 | |||
134 | $input = '###20#000#000###'; |
||
135 | /** @var DecimalValue $value */ |
||
136 | $value = $parser->parse( $input ); |
||
137 | |||
138 | $this->assertSame( '+20000000', $value->getValue() ); |
||
139 | } |
||
140 | |||
141 | public function splitDecimalExponentProvider() { |
||
142 | return [ |
||
143 | 'trailing newline' => [ "1.2E3\n", '1.2', 3 ], |
||
144 | 'whitespace' => [ ' 1.2E3 ', ' 1.2E3 ', 0 ], |
||
145 | 'no exponent' => [ '1.2', '1.2', 0 ], |
||
146 | 'exponent' => [ '1.2E3', '1.2', 3 ], |
||
147 | 'negative exponent' => [ '+1.2e-2', '+1.2', -2 ], |
||
148 | 'positive exponent' => [ '-12e+3', '-12', 3 ], |
||
149 | 'leading zero' => [ '12e+09', '12', 9 ], |
||
150 | 'trailing decimal point' => [ '12.e+3', '12.', 3 ], |
||
151 | 'leading decimal point' => [ '.12e+3', '.12', 3 ], |
||
152 | 'space' => [ '12 e+3', '12 ', 3 ], |
||
153 | 'x10 syntax' => [ '12x10^3', '12', 3 ], |
||
154 | 'comma' => [ '12e3,4', '12', 34 ], |
||
155 | ]; |
||
156 | } |
||
157 | |||
158 | /** |
||
159 | * @dataProvider splitDecimalExponentProvider |
||
160 | */ |
||
161 | public function testSplitDecimalExponent( $valueString, $expectedDecimal, $expectedExponent ) { |
||
162 | $parser = new DecimalParser(); |
||
163 | list( $decimal, $exponent ) = $parser->splitDecimalExponent( $valueString ); |
||
164 | |||
165 | $this->assertSame( $expectedDecimal, $decimal ); |
||
166 | $this->assertSame( $expectedExponent, $exponent ); |
||
167 | } |
||
168 | |||
169 | public function applyDecimalExponentProvider() { |
||
170 | return [ |
||
171 | 'no exponent' => [ new DecimalValue( '+1.2' ), 0, new DecimalValue( '+1.2' ) ], |
||
172 | 'negative exponent' => [ new DecimalValue( '-1.2' ), -2, new DecimalValue( '-0.012' ) ], |
||
173 | 'positive exponent' => [ new DecimalValue( '-12' ), 3, new DecimalValue( '-12000' ) ], |
||
174 | ]; |
||
175 | } |
||
176 | |||
177 | /** |
||
178 | * @dataProvider applyDecimalExponentProvider |
||
179 | */ |
||
180 | public function testApplyDecimalExponent( DecimalValue $decimal, $exponent, DecimalValue $expectedDecimal ) { |
||
181 | $parser = new DecimalParser(); |
||
182 | $actualDecimal = $parser->applyDecimalExponent( $decimal, $exponent ); |
||
183 | |||
184 | $this->assertSame( $expectedDecimal->getValue(), $actualDecimal->getValue() ); |
||
185 | } |
||
186 | |||
187 | } |
||
188 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.