diff --git a/cfg/std.cfg b/cfg/std.cfg
index 6581f0f96..06c32d004 100644
--- a/cfg/std.cfg
+++ b/cfg/std.cfg
@@ -373,5 +373,8 @@
+
+
+ false
diff --git a/lib/checknullpointer.cpp b/lib/checknullpointer.cpp
index d6e2b8233..238b3340c 100644
--- a/lib/checknullpointer.cpp
+++ b/lib/checknullpointer.cpp
@@ -41,177 +41,6 @@ namespace {
*/
void CheckNullPointer::parseFunctionCall(const Token &tok, std::list &var, const Library *library, unsigned char value)
{
- // standard functions that dereference first parameter..
- static std::set functionNames1_all; // used no matter what 'value' is
- static std::set functionNames1_nullptr; // used only when 'value' is 0
- static std::set functionNames1_uninit; // used only when 'value' is non-zero
- if (functionNames1_all.empty()) {
- // cstdlib
- functionNames1_all.insert("atoi");
- functionNames1_all.insert("atof");
- functionNames1_all.insert("atol");
- functionNames1_all.insert("qsort");
- functionNames1_all.insert("strtof");
- functionNames1_all.insert("strtod");
- functionNames1_all.insert("strtol");
- functionNames1_all.insert("strtoul");
- functionNames1_all.insert("strtold");
- functionNames1_all.insert("strtoll");
- functionNames1_all.insert("strtoull");
- functionNames1_all.insert("wcstof");
- functionNames1_all.insert("wcstod");
- functionNames1_all.insert("wcstol");
- functionNames1_all.insert("wcstoul");
- functionNames1_all.insert("wcstold");
- functionNames1_all.insert("wcstoll");
- functionNames1_all.insert("wcstoull");
- // cstring
- functionNames1_all.insert("strcat");
- functionNames1_all.insert("strncat");
- functionNames1_all.insert("strcoll");
- functionNames1_all.insert("strchr");
- functionNames1_all.insert("strrchr");
- functionNames1_all.insert("strcmp");
- functionNames1_all.insert("strncmp");
- functionNames1_all.insert("strcspn");
- functionNames1_all.insert("strdup");
- functionNames1_all.insert("strndup");
- functionNames1_all.insert("strpbrk");
- functionNames1_all.insert("strlen");
- functionNames1_all.insert("strspn");
- functionNames1_all.insert("strstr");
- functionNames1_all.insert("wcscat");
- functionNames1_all.insert("wcsncat");
- functionNames1_all.insert("wcscoll");
- functionNames1_all.insert("wcschr");
- functionNames1_all.insert("wcsrchr");
- functionNames1_all.insert("wcscmp");
- functionNames1_all.insert("wcsncmp");
- functionNames1_all.insert("wcscspn");
- functionNames1_all.insert("wcsdup");
- functionNames1_all.insert("wcsndup");
- functionNames1_all.insert("wcspbrk");
- functionNames1_all.insert("wcslen");
- functionNames1_all.insert("wcsspn");
- functionNames1_all.insert("wcsstr");
- // cstdio
- functionNames1_all.insert("fclose");
- functionNames1_all.insert("feof");
- functionNames1_all.insert("fwrite");
- functionNames1_all.insert("fseek");
- functionNames1_all.insert("ftell");
- functionNames1_all.insert("fputs");
- functionNames1_all.insert("fputws");
- functionNames1_all.insert("ferror");
- functionNames1_all.insert("fgetc");
- functionNames1_all.insert("fgetwc");
- functionNames1_all.insert("fgetpos");
- functionNames1_all.insert("fsetpos");
- functionNames1_all.insert("fscanf");
- functionNames1_all.insert("fprintf");
- functionNames1_all.insert("fwscanf");
- functionNames1_all.insert("fwprintf");
- functionNames1_all.insert("fopen");
- functionNames1_all.insert("rewind");
- functionNames1_all.insert("printf");
- functionNames1_all.insert("wprintf");
- functionNames1_all.insert("scanf");
- functionNames1_all.insert("wscanf");
- functionNames1_all.insert("fscanf");
- functionNames1_all.insert("sscanf");
- functionNames1_all.insert("fwscanf");
- functionNames1_all.insert("swscanf");
- functionNames1_all.insert("setbuf");
- functionNames1_all.insert("setvbuf");
- functionNames1_all.insert("rename");
- functionNames1_all.insert("remove");
- functionNames1_all.insert("puts");
- functionNames1_all.insert("getc");
- functionNames1_all.insert("clearerr");
- // ctime
- functionNames1_all.insert("asctime");
- functionNames1_all.insert("ctime");
- functionNames1_all.insert("mktime");
-
- functionNames1_nullptr.insert("strcpy");
- functionNames1_nullptr.insert("sprintf");
- functionNames1_nullptr.insert("vsprintf");
- functionNames1_nullptr.insert("vprintf");
- functionNames1_nullptr.insert("fprintf");
- functionNames1_nullptr.insert("vfprintf");
- functionNames1_nullptr.insert("wcscpy");
- functionNames1_nullptr.insert("swprintf");
- functionNames1_nullptr.insert("vswprintf");
- functionNames1_nullptr.insert("vwprintf");
- functionNames1_nullptr.insert("fwprintf");
- functionNames1_nullptr.insert("vfwprintf");
- functionNames1_nullptr.insert("fread");
- functionNames1_nullptr.insert("gets");
- functionNames1_nullptr.insert("gmtime");
- functionNames1_nullptr.insert("localtime");
- functionNames1_nullptr.insert("strftime");
-
- functionNames1_uninit.insert("itoa"); // value to convert
- functionNames1_uninit.insert("perror");
- functionNames1_uninit.insert("fflush");
- functionNames1_uninit.insert("freopen");
- }
-
- // standard functions that dereference second parameter..
- static std::set functionNames2_all; // used no matter what 'value' is
- static std::set functionNames2_nullptr; // used only if 'value' is 0
- if (functionNames2_all.empty()) {
- functionNames2_all.insert("mbstowcs");
- functionNames2_all.insert("wcstombs");
- functionNames2_all.insert("strcat");
- functionNames2_all.insert("strncat");
- functionNames2_all.insert("strcmp");
- functionNames2_all.insert("strncmp");
- functionNames2_all.insert("strcoll");
- functionNames2_all.insert("strcpy");
- functionNames2_all.insert("strcspn");
- functionNames2_all.insert("strncpy");
- functionNames2_all.insert("strpbrk");
- functionNames2_all.insert("strspn");
- functionNames2_all.insert("strstr");
- functionNames2_all.insert("strxfrm");
- functionNames2_all.insert("wcscat");
- functionNames2_all.insert("wcsncat");
- functionNames2_all.insert("wcscmp");
- functionNames2_all.insert("wcsncmp");
- functionNames2_all.insert("wcscoll");
- functionNames2_all.insert("wcscpy");
- functionNames2_all.insert("wcscspn");
- functionNames2_all.insert("wcsncpy");
- functionNames2_all.insert("wcspbrk");
- functionNames2_all.insert("wcsspn");
- functionNames2_all.insert("wcsstr");
- functionNames2_all.insert("wcsxfrm");
- functionNames2_all.insert("sprintf");
- functionNames2_all.insert("fprintf");
- functionNames2_all.insert("fscanf");
- functionNames2_all.insert("sscanf");
- functionNames2_all.insert("swprintf");
- functionNames2_all.insert("fwprintf");
- functionNames2_all.insert("fwscanf");
- functionNames2_all.insert("swscanf");
- functionNames2_all.insert("fputs");
- functionNames2_all.insert("fputc");
- functionNames2_all.insert("ungetc");
- functionNames2_all.insert("fputws");
- functionNames2_all.insert("fputwc");
- functionNames2_all.insert("ungetwc");
- functionNames2_all.insert("rename");
- functionNames2_all.insert("putc");
- functionNames2_all.insert("putwc");
- functionNames2_all.insert("freopen");
-
- functionNames2_nullptr.insert("itoa"); // destination buffer
- functionNames2_nullptr.insert("frexp");
- functionNames2_nullptr.insert("modf");
- functionNames2_nullptr.insert("fgetpos");
- }
-
if (Token::Match(&tok, "%var% ( )") || !tok.tokAt(2))
return;
@@ -221,13 +50,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::listvarId() > 0) ||
(value == 0 && Token::Match(firstParam, "0|NULL ,|)"))) {
- if (functionNames1_all.find(tok.str()) != functionNames1_all.end())
- var.push_back(firstParam);
- else if (value == 0 && functionNames1_nullptr.find(tok.str()) != functionNames1_nullptr.end())
- var.push_back(firstParam);
- else if (value != 0 && functionNames1_uninit.find(tok.str()) != functionNames1_uninit.end())
- var.push_back(firstParam);
- else if (value == 0 && Token::Match(&tok, "snprintf|vsnprintf|fnprintf|vfnprintf") && secondParam && secondParam->str() != "0") // Only if length (second parameter) is not zero
+ if (value == 0 && Token::Match(&tok, "snprintf|vsnprintf|fnprintf|vfnprintf") && secondParam && secondParam->str() != "0") // Only if length (second parameter) is not zero
var.push_back(firstParam);
else if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),1))
var.push_back(firstParam);
@@ -237,11 +60,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::listvarId() > 0 && Token::Match(secondParam->next(),"[,)]"))) {
- if (functionNames2_all.find(tok.str()) != functionNames2_all.end())
- var.push_back(secondParam);
- else if (value == 0 && functionNames2_nullptr.find(tok.str()) != functionNames2_nullptr.end())
- var.push_back(secondParam);
- else if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),2))
+ if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),2))
var.push_back(secondParam);
else if (value == 1 && library != nullptr && library->isuninitargbad(tok.str(),2))
var.push_back(secondParam);