Skip to content

Commit

Permalink
PHP 8.3 | Generic/ScopeIndent: bug fix - missing defensive coding
Browse files Browse the repository at this point in the history
As of PHP 8.3, PHP will throw a `Warning: Decrement on type bool has no effect, this will change in the next major version of PHP` notice.

A test run with PHP 8.3 showed this deprecation notice being thrown in the `Generic.WhiteSpace.ScopeIndent` sniff.

Investigation of the notice showed that this was actually a bug due to too little defensive coding.

The sniff tries to skip over multi-line/multi-token text strings, but the `findNext()` will return `false` for a single-line/single-token text string, which would lead to `$i` being reset to `0`.

This commit fixes this by only changing `$i` when the return from the call to `findNext()` is not `false`.

Ref: https://wiki.php.net/rfc/saner-inc-dec-operators
  • Loading branch information
jrfnl committed Nov 11, 2023
1 parent b0d171b commit 3365738
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/Standards/Generic/Sniffs/WhiteSpace/ScopeIndentSniff.php
Original file line number Diff line number Diff line change
Expand Up @@ -1090,8 +1090,11 @@ public function process(File $phpcsFile, $stackPtr)
if ($tokens[$i]['code'] === T_CONSTANT_ENCAPSED_STRING
|| $tokens[$i]['code'] === T_DOUBLE_QUOTED_STRING
) {
$i = $phpcsFile->findNext($tokens[$i]['code'], ($i + 1), null, true);
$i--;
$nextNonTextString = $phpcsFile->findNext($tokens[$i]['code'], ($i + 1), null, true);
if ($nextNonTextString !== false) {
$i = ($nextNonTextString - 1);
}

continue;
}

Expand Down

0 comments on commit 3365738

Please sign in to comment.