Skip to content

Fix counting *scanf() format string placeholders#5594

Open
hakre wants to merge 2 commits intophpstan:2.1.xfrom
hakre:patch-1
Open

Fix counting *scanf() format string placeholders#5594
hakre wants to merge 2 commits intophpstan:2.1.xfrom
hakre:patch-1

Conversation

@hakre
Copy link
Copy Markdown

@hakre hakre commented May 3, 2026

Update PrintfHelper.php:

Make public function getScanfPlaceholdersCount(string $format): ?int returning the sscanf() vetted number of placeholders that give/return/assign conversions.

refs:

@hakre hakre force-pushed the patch-1 branch 4 times, most recently from 57da830 to 5742f2b Compare May 3, 2026 19:24
@hakre hakre marked this pull request as draft May 5, 2026 19:34
@hakre hakre changed the title Counting sscanf/fscanf format string placeholders Fix counting sscanf/fscanf format string placeholders May 5, 2026
@hakre hakre marked this pull request as ready for review May 6, 2026 02:59
@phpstan-bot
Copy link
Copy Markdown
Collaborator

This pull request has been marked as ready for review.

Comment thread src/Rules/Functions/PrintfHelper.php Outdated
Comment thread tests/PHPStan/Rules/Functions/data/printf.php Outdated
@hakre hakre changed the title Fix counting sscanf/fscanf format string placeholders Fix counting *scanf() format string placeholders May 6, 2026
@hakre
Copy link
Copy Markdown
Author

hakre commented May 6, 2026

Do you know by chance why https://github.com/phpstan/phpstan-src/actions/runs/25431166468/job/74597885107 keeps failing on my changes? I'd like to better understand @staabm

@hakre hakre requested a review from staabm May 6, 2026 12:20
@staabm
Copy link
Copy Markdown
Contributor

staabm commented May 6, 2026

Do you know by chance why phpstan/phpstan-src/actions/runs/25431166468/job/74597885107 keeps failing on my changes?

we see the same errors on others PRs targeting 2.1.x -> this means these errors are not related to your PR

@hakre hakre force-pushed the patch-1 branch 5 times, most recently from 04f1759 to bd2dc56 Compare May 6, 2026 22:22
Comment thread tests/PHPStan/Rules/Functions/PrintfHelperTest.php Outdated
Comment thread tests/PHPStan/Rules/Functions/PrintfHelperTest.php Outdated
@hakre hakre force-pushed the patch-1 branch 2 times, most recently from 8a37d48 to ddd449b Compare May 7, 2026 07:09
Additional by-catch fix of a variable misnomer in 023fa08 ("Fix printf
parameters rule", 2017-04-02) spotted during review.
Comment thread tests/PHPStan/Rules/Functions/PrintfHelperTest.php Outdated
Comment thread src/Rules/Functions/PrintfHelper.php Outdated
Comment thread src/Rules/Functions/PrintfHelper.php Outdated
hakre added a commit to hakre/phpstan-src that referenced this pull request May 9, 2026
Re-add `@` suppression per review to run CI [1]

Intentionally the user handle not added [2]

[1]: phpstan#5594 (comment)
[2]: phpstan#5594 (comment)

Remove `@` suppression and version branching per review

The reviewer originally asked to replace the custom error handler with
`@` suppression. Now they prefer a plain `try/catch` path, without the
error handler and without the `@`. This brings us closer to the very
first proposal, but removes the `ValueError`‑converting user handler.

(Gegenprobe: if PHP 7 warnings interfere with the test, we'll know
quickly.)
@staabm
Copy link
Copy Markdown
Contributor

staabm commented May 9, 2026

so finally, this seem to work now.


only thing missing is a test for the actual problem, you are trying to solve, namely https://phpstan.org/r/f44a6c55-b410-4aae-b174-17b093e62cb0

please add a rule test showing that the error

Call to sscanf contains 6 placeholders, 3 values given

no longer appears

@hakre
Copy link
Copy Markdown
Author

hakre commented May 9, 2026

Yes, I'll add a rule test for that. I can either extend the existing fixture file we already touched in this PR (which seems simplest) or create a new bug-14567.php file. Let me know your preference, or I'll just go with the extension if that works.

@staabm
Copy link
Copy Markdown
Contributor

staabm commented May 9, 2026

please add a isolated test-case with your bug number, like we already have

similar to e.g. public function testBug4717(): void

@hakre
Copy link
Copy Markdown
Author

hakre commented May 9, 2026

Pushed — let's see what the test suite says.

Update PrintfHelper.php to make

    public function getScanfPlaceholdersCount(string $format): ?int`

return the sscanf() vetted number of placeholders that return/assign
conversions.

Addresses long-standing regressions reported originally in
[phpstan-10260].

References:

- [phpstan-10260]
- phpstan/phpstan#10260 (comment)
- [phpstan-src-5591]
- [phpstan-14567]
- https://3v4l.org/WR85Q

[phpstan-10260]: phpstan/phpstan#10260
[phpstan-src-5591]: phpstan#5591
[phpstan-14567]: phpstan/phpstan#14567
@hakre
Copy link
Copy Markdown
Author

hakre commented May 9, 2026

Test suite is happy. Let me know if anything else is needed.

@staabm staabm requested a review from VincentLanglet May 9, 2026 09:17
@hakre
Copy link
Copy Markdown
Author

hakre commented May 9, 2026

Thanks for the quick review. I'm afk for a bit – feel free to nudge if I miss anything.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants