Skip to content

fix internalError in checkFormatString on invalid width or position - #8982

Open
Nussu06 wants to merge 1 commit into
cppcheck-opensource:mainfrom
Nussu06:checkio-format-width-bailout
Open

Nussu06 wants to merge 1 commit into
cppcheck-opensource:mainfrom
Nussu06:checkio-format-width-bailout

Conversation

@Nussu06

@Nussu06 Nussu06 commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

CheckIOImpl::checkFormatString converts the digits collected for a field width or a POSIX parameter position with strToInt, which throws when the digits are empty (%$d), start with a zero (%01$d, which glibc accepts) or do not fit in an int (%99999999999$d, scanf("%99999999999s", buf) with a known array), so one such format string makes CppCheck::checkFile bail out with an internalError and drop every other diagnostic for that file. Replaced the conversion with a small helper that parses the digits without throwing and clamps anything above INT_MAX, and a $ with no digits in front is no longer taken as a parameter position; widths and positions that fit in an int behave exactly as before, while an oversized one is now reported through the existing invalidScanfFormatWidth and wrongPrintfScanfParameterPositionError messages, with 2147483647 shown for the clamped value. Verified with an ASan/UBSan build: the new asserts in TestIO::testScanf4 and testPosixPrintfScanfParameterPosition throw on main and pass with the fix, the full testrunner is green, and the selfcheck options report nothing for lib/checkio.cpp. I do not have Trac access, so could you create a ticket for this? I will update the title to reference it once there is a number.

@dmcppcheck

Copy link
Copy Markdown
Contributor

There should probably be a trac ticket for this PR. Please create it, or ask us to create it. Then the PR title should be updated.

@Nussu06

Nussu06 commented Oct 31, 2026

Copy link
Copy Markdown
Contributor Author

hey can anyone create trac ticket for this pr, thanks.

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.

2 participants