Skip to content

Commit ebde743

Browse files
fixup! fixup! fixup! fixup! fixup! fixup! Fix #958: warn when feof() is used as a while loop condition
1 parent 835f187 commit ebde743

1 file changed

Lines changed: 16 additions & 8 deletions

File tree

lib/checkio.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -484,14 +484,18 @@ void CheckIO::invalidScanfError(const Token *tok)
484484
static bool findFileReadCall(const Token *start, const Token *end, int varid)
485485
{
486486
const Token* found = Token::findmatch(start, "fgets|fgetc|getc|fread|fscanf (", end);
487-
const std::vector<const Token*> args = getArguments(found);
488-
if (args.empty())
489-
return false;
490-
491-
if (found->str() == "fscanf")
492-
return args.front()->varId() == varid;
493-
494-
return args.back()->varId() == varid;
487+
while (found) {
488+
const std::vector<const Token*> args = getArguments(found);
489+
if (!args.empty()) {
490+
const bool match = (found->str() == "fscanf")
491+
? args.front()->varId() == varid
492+
: args.back()->varId() == varid;
493+
if (match)
494+
return true;
495+
}
496+
found = Token::findmatch(found->next(), "fgets|fgetc|getc|fread|fscanf (", end);
497+
}
498+
return false;
495499
}
496500

497501
void CheckIO::checkWrongfeofUsage()
@@ -509,6 +513,10 @@ void CheckIO::checkWrongfeofUsage()
509513
const Token *endCond = tok->linkAt(1);
510514
const Token *endBody = endCond->linkAt(1);
511515
const int fpVarId = tok->tokAt(5)->varId();
516+
517+
// Bail out if we cannot identify file pointer
518+
if (fpVarId == 0)
519+
continue;
512520
if (findFileReadCall(scope->bodyStart, tok, fpVarId) && findFileReadCall(tok, endBody, fpVarId))
513521
continue;
514522

0 commit comments

Comments
 (0)