File tree Expand file tree Collapse file tree
tests/PHPStan/Rules/Functions/data Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2222use function array_keys ;
2323use function array_values ;
2424use function count ;
25+ use function key ;
2526use function ksort ;
27+ use function is_string ;
2628use function max ;
2729use function sprintf ;
2830
@@ -120,16 +122,17 @@ public static function reorderCallUserFuncArrayArguments(
120122 }
121123 }
122124
123- if ($ argsArrayArg === null ) {
124- if ($ arg ->name === null && $ i === 1 ) {
125- $ argsArrayArg = $ arg ;
126- continue ;
127- }
128- if ($ arg ->name !== null && $ arg ->name ->toString () === 'args ' ) {
129- $ argsArrayArg = $ arg ;
130- continue ;
131- }
125+ if ($ argsArrayArg !== null ) {
126+ continue ;
132127 }
128+ if ($ arg ->name === null && $ i === 1 ) {
129+ $ argsArrayArg = $ arg ;
130+ continue ;
131+ }
132+ if ($ arg ->name === null || $ arg ->name ->toString () !== 'args ' ) {
133+ continue ;
134+ }
135+ $ argsArrayArg = $ arg ;
133136 }
134137
135138 if ($ callbackArg === null || $ argsArrayArg === null ) {
@@ -149,8 +152,11 @@ public static function reorderCallUserFuncArrayArguments(
149152 foreach ($ argsArrayArg ->value ->items as $ item ) {
150153 $ key = null ;
151154 if ($ item ->key instanceof String_) {
152- /** @var int|string $offsetValue */
155+ /** @var int|string $key */
153156 $ key = key ([$ item ->key ->value => null ]);
157+ if ($ key === '' ) {
158+ return null ;
159+ }
154160 } elseif ($ item ->key !== null && !$ item ->key instanceof Int_) {
155161 // Dynamic key, we cannot be sure.
156162 return null ;
@@ -161,7 +167,7 @@ public static function reorderCallUserFuncArrayArguments(
161167 $ item ->byRef ,
162168 $ item ->unpack ,
163169 $ item ->getAttributes (),
164- \ is_string ($ key ) ? new Identifier ($ key ) : null ,
170+ is_string ($ key ) ? new Identifier ($ key ) : null ,
165171 );
166172 }
167173
Original file line number Diff line number Diff line change 1111use PHPStan \Rules \FunctionCallParametersCheck ;
1212use PHPStan \Rules \Rule ;
1313use function count ;
14- use function ucfirst ;
1514use function sprintf ;
15+ use function ucfirst ;
1616
1717/**
1818 * @implements Rule<FuncCall>
Original file line number Diff line number Diff line change @@ -53,6 +53,8 @@ public function doMore(): void
5353 call_user_func_array ($ f , ['1 ' => 'foo ' ]); // Same as call_user_func_array($f, ['foo'])
5454 call_user_func_array ($ f , [1 => 42 ]); // Same as call_user_func_array($f, [42])
5555 call_user_func_array ($ f , ['1 ' => 42 ]); // Same as call_user_func_array($f, [42])
56+
57+ call_user_func_array ($ f , ['' => 42 ]); // Could be reported but should at least not crash PHPStan
5658 }
5759
5860}
You can’t perform that action at this time.
0 commit comments