Skip to content

Commit 3559a76

Browse files
committed
Cover the pre-PHP 8 parameter names for the by-ref out-parameter builtins
str_replace/str_ireplace's count and preg_match/preg_match_all's matches resolve to different parameter names (replace_count/subpatterns) when the target PHP version is below 8.0: NativeFunctionReflectionProvider falls back from php-8-stubs to the legacy functionMap.php names in that case. List both names in the metadata so the by-ref-omitted suppression works regardless of the analysed PHP version. Found via the old-PHPUnit (7.4) CI job, which runs the test suite against phpVersion 7.4 by default.
1 parent 9e0daad commit 3559a76

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

‎bin/functionMetadata_original.php‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,10 @@
268268
'output_reset_rewrite_vars' => ['hasSideEffects' => true],
269269
'pclose' => ['hasSideEffects' => true],
270270
'popen' => ['hasSideEffects' => true],
271-
'preg_match' => ['pureUnlessParameterPassedParameters' => ['matches' => true]],
272-
'preg_match_all' => ['pureUnlessParameterPassedParameters' => ['matches' => true]],
271+
// 'matches'/'subpatterns': PHP 8+ uses the php-8-stubs parameter name, PHP <8 falls
272+
// back to the legacy functionMap.php name.
273+
'preg_match' => ['pureUnlessParameterPassedParameters' => ['matches' => true, 'subpatterns' => true]],
274+
'preg_match_all' => ['pureUnlessParameterPassedParameters' => ['matches' => true, 'subpatterns' => true]],
273275
'preg_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
274276
'preg_replace_callback' => ['pureUnlessCallableIsImpureParameters' => ['callback' => true]],
275277
'similar_text' => ['pureUnlessParameterPassedParameters' => ['percent' => true]],
@@ -280,8 +282,10 @@
280282
'sprintf' => ['hasSideEffects' => false],
281283
'str_decrement' => ['hasSideEffects' => false],
282284
'str_increment' => ['hasSideEffects' => false],
283-
'str_ireplace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
284-
'str_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
285+
// 'count'/'replace_count': PHP 8+ uses the php-8-stubs parameter name, PHP <8 falls
286+
// back to the legacy functionMap.php name.
287+
'str_ireplace' => ['pureUnlessParameterPassedParameters' => ['count' => true, 'replace_count' => true]],
288+
'str_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true, 'replace_count' => true]],
285289
'symlink' => ['hasSideEffects' => true],
286290
'time' => ['hasSideEffects' => true],
287291
'tempnam' => ['hasSideEffects' => true],

‎resources/functionMetadata.php‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,8 +1637,8 @@
16371637
'preg_grep' => ['hasSideEffects' => false],
16381638
'preg_last_error' => ['hasSideEffects' => true],
16391639
'preg_last_error_msg' => ['hasSideEffects' => true],
1640-
'preg_match' => ['pureUnlessParameterPassedParameters' => ['matches' => true]],
1641-
'preg_match_all' => ['pureUnlessParameterPassedParameters' => ['matches' => true]],
1640+
'preg_match' => ['pureUnlessParameterPassedParameters' => ['matches' => true, 'subpatterns' => true]],
1641+
'preg_match_all' => ['pureUnlessParameterPassedParameters' => ['matches' => true, 'subpatterns' => true]],
16421642
'preg_quote' => ['hasSideEffects' => false],
16431643
'preg_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
16441644
'preg_replace_callback' => ['pureUnlessCallableIsImpureParameters' => ['callback' => true]],
@@ -1687,10 +1687,10 @@
16871687
'str_ends_with' => ['hasSideEffects' => false],
16881688
'str_getcsv' => ['hasSideEffects' => false],
16891689
'str_increment' => ['hasSideEffects' => false],
1690-
'str_ireplace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
1690+
'str_ireplace' => ['pureUnlessParameterPassedParameters' => ['count' => true, 'replace_count' => true]],
16911691
'str_pad' => ['hasSideEffects' => false],
16921692
'str_repeat' => ['hasSideEffects' => false],
1693-
'str_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true]],
1693+
'str_replace' => ['pureUnlessParameterPassedParameters' => ['count' => true, 'replace_count' => true]],
16941694
'str_rot13' => ['hasSideEffects' => false],
16951695
'str_split' => ['hasSideEffects' => false],
16961696
'str_starts_with' => ['hasSideEffects' => false],

0 commit comments

Comments
 (0)