@@ -102,12 +102,14 @@ void CheckFunctionsImpl::functionCalledError(const Token* tok, Severity severity
102102 reportError (tok, severity, prefix + " Called" , msg, CWE477 , Certainty::normal);
103103}
104104
105- static bool hasArgMinSize (const Token* ftok, int argnr, const Settings& settings )
105+ static bool hasArgMinReadSize (const Token * ftok, int argnr, const Library &library )
106106{
107- if (const std::vector<Library::ArgumentChecks::MinSize>* minsizes = settings.library .argminsizes (ftok, argnr)) {
108- return std::any_of (minsizes->begin (), minsizes->end (), [](const Library::ArgumentChecks::MinSize& ms) {
109- return ms.type == Library::ArgumentChecks::MinSize::Type::ARGVALUE ;
110- });
107+ if (library.getArgDirection (ftok, argnr) == Library::ArgumentChecks::Direction::DIR_IN ) {
108+ if (const std::vector<Library::ArgumentChecks::MinSize> *minsizes = library.argminsizes (ftok, argnr)) {
109+ return std::any_of (minsizes->begin (), minsizes->end (), [](const Library::ArgumentChecks::MinSize &ms) {
110+ return ms.type == Library::ArgumentChecks::MinSize::Type::ARGVALUE ;
111+ });
112+ }
111113 }
112114 return false ;
113115}
@@ -147,7 +149,7 @@ void CheckFunctionsImpl::invalidFunctionUsage()
147149 invalidFunctionArgError (argtok, functionToken->str (), argnr, nullptr , mSettings .library .validarg (functionToken, argnr));
148150 }
149151 // check <strz>
150- if (mSettings .library .isargstrz (functionToken, argnr) && !hasArgMinSize (functionToken, argnr, mSettings )) {
152+ if (mSettings .library .isargstrz (functionToken, argnr) && !hasArgMinReadSize (functionToken, argnr, mSettings . library )) {
151153 if (Token::Match (argtok, " & %var% !![" ) && argtok->next () && argtok->next ()->valueType ()) {
152154 const ValueType * valueType = argtok->next ()->valueType ();
153155 const Variable * variable = argtok->next ()->variable ();
0 commit comments