@@ -62,28 +62,26 @@ static bool checkNullpointerFunctionCallPlausibility(const Function* func, unsig
6262 * @param var variables that the function read / write.
6363 * @param library --library files data
6464 */
65- void CheckNullPointer::parseFunctionCall (const Token &tok, std::list<const Token *> &var, const Library * library)
65+ void CheckNullPointer::parseFunctionCall (const Token &tok, std::list<const Token *> &var, const Library & library)
6666{
6767 if (Token::Match (&tok, " %name% ( )" ) || !tok.tokAt (2 ))
6868 return ;
6969
7070 const std::vector<const Token *> args = getArguments (&tok);
7171
72- if (library || tok.function () != nullptr ) {
73- for (int argnr = 1 ; argnr <= args.size (); ++argnr) {
74- const Token *param = args[argnr - 1 ];
75- if (library && library->isnullargbad (&tok, argnr) && checkNullpointerFunctionCallPlausibility (tok.function (), argnr))
72+ for (int argnr = 1 ; argnr <= args.size (); ++argnr) {
73+ const Token *param = args[argnr - 1 ];
74+ if (library.isnullargbad (&tok, argnr) && checkNullpointerFunctionCallPlausibility (tok.function (), argnr))
75+ var.push_back (param);
76+ else if (tok.function ()) {
77+ const Variable* argVar = tok.function ()->getArgumentVar (argnr-1 );
78+ if (argVar && argVar->isStlStringType () && !argVar->isArrayOrPointer ())
7679 var.push_back (param);
77- else if (tok.function ()) {
78- const Variable* argVar = tok.function ()->getArgumentVar (argnr-1 );
79- if (argVar && argVar->isStlStringType () && !argVar->isArrayOrPointer ())
80- var.push_back (param);
81- }
8280 }
8381 }
8482
85- if (library && library-> formatstr_function (&tok)) {
86- const int formatStringArgNr = library-> formatstr_argno (&tok);
83+ if (library. formatstr_function (&tok)) {
84+ const int formatStringArgNr = library. formatstr_argno (&tok);
8785 if (formatStringArgNr < 0 || formatStringArgNr >= args.size ())
8886 return ;
8987
@@ -95,7 +93,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::list<const Token
9593 return ;
9694 const std::string &formatString = args[formatStringArgNr]->strValue ();
9795 int argnr = formatStringArgNr + 1 ;
98- const bool scan = library-> formatstr_scan (&tok);
96+ const bool scan = library. formatstr_scan (&tok);
9997
10098 bool percent = false ;
10199 for (std::string::const_iterator i = formatString.cbegin (); i != formatString.cend (); ++i) {
@@ -148,15 +146,15 @@ namespace {
148146 */
149147bool CheckNullPointer::isPointerDeRef (const Token *tok, bool &unknown) const
150148{
151- return isPointerDeRef (tok, unknown, mSettings );
149+ return isPointerDeRef (tok, unknown, * mSettings );
152150}
153151
154- bool CheckNullPointer::isPointerDeRef (const Token *tok, bool &unknown, const Settings * settings)
152+ bool CheckNullPointer::isPointerDeRef (const Token *tok, bool &unknown, const Settings & settings)
155153{
156154 unknown = false ;
157155
158156 // Is pointer used as function parameter?
159- if (Token::Match (tok->previous (), " [(,] %name% [,)]" ) && settings ) {
157+ if (Token::Match (tok->previous (), " [(,] %name% [,)]" )) {
160158 const Token *ftok = tok->previous ();
161159 while (ftok && ftok->str () != " (" ) {
162160 if (ftok->str () == " )" )
@@ -165,7 +163,7 @@ bool CheckNullPointer::isPointerDeRef(const Token *tok, bool &unknown, const Set
165163 }
166164 if (ftok && ftok->previous ()) {
167165 std::list<const Token *> varlist;
168- parseFunctionCall (*ftok->previous (), varlist, & settings-> library );
166+ parseFunctionCall (*ftok->previous (), varlist, settings. library );
169167 if (std::find (varlist.cbegin (), varlist.cend (), tok) != varlist.cend ()) {
170168 return true ;
171169 }
@@ -263,7 +261,7 @@ bool CheckNullPointer::isPointerDeRef(const Token *tok, bool &unknown, const Set
263261}
264262
265263
266- static bool isNullablePointer (const Token* tok, const Settings* settings )
264+ static bool isNullablePointer (const Token* tok)
267265{
268266 if (!tok)
269267 return false ;
@@ -274,7 +272,7 @@ static bool isNullablePointer(const Token* tok, const Settings* settings)
274272 if (astIsSmartPointer (tok))
275273 return true ;
276274 if (Token::simpleMatch (tok, " ." ))
277- return isNullablePointer (tok->astOperand2 (), settings );
275+ return isNullablePointer (tok->astOperand2 ());
278276 if (const Variable* var = tok->variable ()) {
279277 return (var->isPointer () || var->isSmartPointer ());
280278 }
@@ -294,8 +292,8 @@ void CheckNullPointer::nullPointerByDeRefAndChec()
294292 if (Token::Match (tok, " %num%|%char%|%str%" ))
295293 continue ;
296294
297- if (!isNullablePointer (tok, mSettings ) ||
298- (tok->str () == " ." && isNullablePointer (tok->astOperand2 (), mSettings ) && tok->astOperand2 ()->getValue (0 ))) // avoid duplicate warning
295+ if (!isNullablePointer (tok) ||
296+ (tok->str () == " ." && isNullablePointer (tok->astOperand2 ()) && tok->astOperand2 ()->getValue (0 ))) // avoid duplicate warning
299297 continue ;
300298
301299 // Can pointer be NULL?
@@ -367,7 +365,7 @@ void CheckNullPointer::nullConstantDereference()
367365 nullPointerError (tok);
368366 } else { // function call
369367 std::list<const Token *> var;
370- parseFunctionCall (*tok, var, & mSettings ->library );
368+ parseFunctionCall (*tok, var, mSettings ->library );
371369
372370 // is one of the var items a NULL pointer?
373371 for (const Token *vartok : var) {
@@ -551,7 +549,7 @@ void CheckNullPointer::redundantConditionWarning(const Token* tok, const ValueFl
551549}
552550
553551// NOLINTNEXTLINE(readability-non-const-parameter) - used as callback so we need to preserve the signature
554- static bool isUnsafeUsage (const Settings * settings, const Token *vartok, MathLib::bigint *value)
552+ static bool isUnsafeUsage (const Settings & settings, const Token *vartok, MathLib::bigint *value)
555553{
556554 (void )value;
557555 bool unknown = false ;
@@ -580,7 +578,7 @@ namespace
580578 };
581579}
582580
583- Check::FileInfo *CheckNullPointer::getFileInfo (const Tokenizer * tokenizer, const Settings * settings) const
581+ Check::FileInfo *CheckNullPointer::getFileInfo (const Tokenizer & tokenizer, const Settings & settings) const
584582{
585583 const std::list<CTU::FileInfo::UnsafeUsage> &unsafeUsage = CTU::getUnsafeUsage (tokenizer, settings, isUnsafeUsage);
586584 if (unsafeUsage.empty ())
0 commit comments