Skip to content

Commit ac4e727

Browse files
committed
Removed redundant code (replaced by libaries, should fix danmar#5934).
1 parent 3a89e5d commit ac4e727

File tree

2 files changed

+5
-183
lines changed

2 files changed

+5
-183
lines changed

cfg/std.cfg

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,5 +373,8 @@
373373
<podtype name="uint_fast64_t" sign="u"/>
374374
<podtype name="intptr_t" sign="s"/>
375375
<podtype name="uintptr_t" sign="u"/>
376+
377+
<!--Not part of standard, but widely supported by runtime libraries-->
378+
<function name="itoa"><noreturn>false</noreturn><leak-ignore/><arg nr="1"><not-uninit/></arg><arg nr="2"><not-null/><not-uninit/></arg></function>
376379
</def>
377380

lib/checknullpointer.cpp

Lines changed: 2 additions & 183 deletions
Original file line numberDiff line numberDiff line change
@@ -41,177 +41,6 @@ namespace {
4141
*/
4242
void CheckNullPointer::parseFunctionCall(const Token &tok, std::list<const Token *> &var, const Library *library, unsigned char value)
4343
{
44-
// standard functions that dereference first parameter..
45-
static std::set<std::string> functionNames1_all; // used no matter what 'value' is
46-
static std::set<std::string> functionNames1_nullptr; // used only when 'value' is 0
47-
static std::set<std::string> functionNames1_uninit; // used only when 'value' is non-zero
48-
if (functionNames1_all.empty()) {
49-
// cstdlib
50-
functionNames1_all.insert("atoi");
51-
functionNames1_all.insert("atof");
52-
functionNames1_all.insert("atol");
53-
functionNames1_all.insert("qsort");
54-
functionNames1_all.insert("strtof");
55-
functionNames1_all.insert("strtod");
56-
functionNames1_all.insert("strtol");
57-
functionNames1_all.insert("strtoul");
58-
functionNames1_all.insert("strtold");
59-
functionNames1_all.insert("strtoll");
60-
functionNames1_all.insert("strtoull");
61-
functionNames1_all.insert("wcstof");
62-
functionNames1_all.insert("wcstod");
63-
functionNames1_all.insert("wcstol");
64-
functionNames1_all.insert("wcstoul");
65-
functionNames1_all.insert("wcstold");
66-
functionNames1_all.insert("wcstoll");
67-
functionNames1_all.insert("wcstoull");
68-
// cstring
69-
functionNames1_all.insert("strcat");
70-
functionNames1_all.insert("strncat");
71-
functionNames1_all.insert("strcoll");
72-
functionNames1_all.insert("strchr");
73-
functionNames1_all.insert("strrchr");
74-
functionNames1_all.insert("strcmp");
75-
functionNames1_all.insert("strncmp");
76-
functionNames1_all.insert("strcspn");
77-
functionNames1_all.insert("strdup");
78-
functionNames1_all.insert("strndup");
79-
functionNames1_all.insert("strpbrk");
80-
functionNames1_all.insert("strlen");
81-
functionNames1_all.insert("strspn");
82-
functionNames1_all.insert("strstr");
83-
functionNames1_all.insert("wcscat");
84-
functionNames1_all.insert("wcsncat");
85-
functionNames1_all.insert("wcscoll");
86-
functionNames1_all.insert("wcschr");
87-
functionNames1_all.insert("wcsrchr");
88-
functionNames1_all.insert("wcscmp");
89-
functionNames1_all.insert("wcsncmp");
90-
functionNames1_all.insert("wcscspn");
91-
functionNames1_all.insert("wcsdup");
92-
functionNames1_all.insert("wcsndup");
93-
functionNames1_all.insert("wcspbrk");
94-
functionNames1_all.insert("wcslen");
95-
functionNames1_all.insert("wcsspn");
96-
functionNames1_all.insert("wcsstr");
97-
// cstdio
98-
functionNames1_all.insert("fclose");
99-
functionNames1_all.insert("feof");
100-
functionNames1_all.insert("fwrite");
101-
functionNames1_all.insert("fseek");
102-
functionNames1_all.insert("ftell");
103-
functionNames1_all.insert("fputs");
104-
functionNames1_all.insert("fputws");
105-
functionNames1_all.insert("ferror");
106-
functionNames1_all.insert("fgetc");
107-
functionNames1_all.insert("fgetwc");
108-
functionNames1_all.insert("fgetpos");
109-
functionNames1_all.insert("fsetpos");
110-
functionNames1_all.insert("fscanf");
111-
functionNames1_all.insert("fprintf");
112-
functionNames1_all.insert("fwscanf");
113-
functionNames1_all.insert("fwprintf");
114-
functionNames1_all.insert("fopen");
115-
functionNames1_all.insert("rewind");
116-
functionNames1_all.insert("printf");
117-
functionNames1_all.insert("wprintf");
118-
functionNames1_all.insert("scanf");
119-
functionNames1_all.insert("wscanf");
120-
functionNames1_all.insert("fscanf");
121-
functionNames1_all.insert("sscanf");
122-
functionNames1_all.insert("fwscanf");
123-
functionNames1_all.insert("swscanf");
124-
functionNames1_all.insert("setbuf");
125-
functionNames1_all.insert("setvbuf");
126-
functionNames1_all.insert("rename");
127-
functionNames1_all.insert("remove");
128-
functionNames1_all.insert("puts");
129-
functionNames1_all.insert("getc");
130-
functionNames1_all.insert("clearerr");
131-
// ctime
132-
functionNames1_all.insert("asctime");
133-
functionNames1_all.insert("ctime");
134-
functionNames1_all.insert("mktime");
135-
136-
functionNames1_nullptr.insert("strcpy");
137-
functionNames1_nullptr.insert("sprintf");
138-
functionNames1_nullptr.insert("vsprintf");
139-
functionNames1_nullptr.insert("vprintf");
140-
functionNames1_nullptr.insert("fprintf");
141-
functionNames1_nullptr.insert("vfprintf");
142-
functionNames1_nullptr.insert("wcscpy");
143-
functionNames1_nullptr.insert("swprintf");
144-
functionNames1_nullptr.insert("vswprintf");
145-
functionNames1_nullptr.insert("vwprintf");
146-
functionNames1_nullptr.insert("fwprintf");
147-
functionNames1_nullptr.insert("vfwprintf");
148-
functionNames1_nullptr.insert("fread");
149-
functionNames1_nullptr.insert("gets");
150-
functionNames1_nullptr.insert("gmtime");
151-
functionNames1_nullptr.insert("localtime");
152-
functionNames1_nullptr.insert("strftime");
153-
154-
functionNames1_uninit.insert("itoa"); // value to convert
155-
functionNames1_uninit.insert("perror");
156-
functionNames1_uninit.insert("fflush");
157-
functionNames1_uninit.insert("freopen");
158-
}
159-
160-
// standard functions that dereference second parameter..
161-
static std::set<std::string> functionNames2_all; // used no matter what 'value' is
162-
static std::set<std::string> functionNames2_nullptr; // used only if 'value' is 0
163-
if (functionNames2_all.empty()) {
164-
functionNames2_all.insert("mbstowcs");
165-
functionNames2_all.insert("wcstombs");
166-
functionNames2_all.insert("strcat");
167-
functionNames2_all.insert("strncat");
168-
functionNames2_all.insert("strcmp");
169-
functionNames2_all.insert("strncmp");
170-
functionNames2_all.insert("strcoll");
171-
functionNames2_all.insert("strcpy");
172-
functionNames2_all.insert("strcspn");
173-
functionNames2_all.insert("strncpy");
174-
functionNames2_all.insert("strpbrk");
175-
functionNames2_all.insert("strspn");
176-
functionNames2_all.insert("strstr");
177-
functionNames2_all.insert("strxfrm");
178-
functionNames2_all.insert("wcscat");
179-
functionNames2_all.insert("wcsncat");
180-
functionNames2_all.insert("wcscmp");
181-
functionNames2_all.insert("wcsncmp");
182-
functionNames2_all.insert("wcscoll");
183-
functionNames2_all.insert("wcscpy");
184-
functionNames2_all.insert("wcscspn");
185-
functionNames2_all.insert("wcsncpy");
186-
functionNames2_all.insert("wcspbrk");
187-
functionNames2_all.insert("wcsspn");
188-
functionNames2_all.insert("wcsstr");
189-
functionNames2_all.insert("wcsxfrm");
190-
functionNames2_all.insert("sprintf");
191-
functionNames2_all.insert("fprintf");
192-
functionNames2_all.insert("fscanf");
193-
functionNames2_all.insert("sscanf");
194-
functionNames2_all.insert("swprintf");
195-
functionNames2_all.insert("fwprintf");
196-
functionNames2_all.insert("fwscanf");
197-
functionNames2_all.insert("swscanf");
198-
functionNames2_all.insert("fputs");
199-
functionNames2_all.insert("fputc");
200-
functionNames2_all.insert("ungetc");
201-
functionNames2_all.insert("fputws");
202-
functionNames2_all.insert("fputwc");
203-
functionNames2_all.insert("ungetwc");
204-
functionNames2_all.insert("rename");
205-
functionNames2_all.insert("putc");
206-
functionNames2_all.insert("putwc");
207-
functionNames2_all.insert("freopen");
208-
209-
functionNames2_nullptr.insert("itoa"); // destination buffer
210-
functionNames2_nullptr.insert("frexp");
211-
functionNames2_nullptr.insert("modf");
212-
functionNames2_nullptr.insert("fgetpos");
213-
}
214-
21544
if (Token::Match(&tok, "%var% ( )") || !tok.tokAt(2))
21645
return;
21746

@@ -221,13 +50,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::list<const Token
22150
// 1st parameter..
22251
if ((Token::Match(firstParam, "%var% ,|)") && firstParam->varId() > 0) ||
22352
(value == 0 && Token::Match(firstParam, "0|NULL ,|)"))) {
224-
if (functionNames1_all.find(tok.str()) != functionNames1_all.end())
225-
var.push_back(firstParam);
226-
else if (value == 0 && functionNames1_nullptr.find(tok.str()) != functionNames1_nullptr.end())
227-
var.push_back(firstParam);
228-
else if (value != 0 && functionNames1_uninit.find(tok.str()) != functionNames1_uninit.end())
229-
var.push_back(firstParam);
230-
else if (value == 0 && Token::Match(&tok, "snprintf|vsnprintf|fnprintf|vfnprintf") && secondParam && secondParam->str() != "0") // Only if length (second parameter) is not zero
53+
if (value == 0 && Token::Match(&tok, "snprintf|vsnprintf|fnprintf|vfnprintf") && secondParam && secondParam->str() != "0") // Only if length (second parameter) is not zero
23154
var.push_back(firstParam);
23255
else if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),1))
23356
var.push_back(firstParam);
@@ -237,11 +60,7 @@ void CheckNullPointer::parseFunctionCall(const Token &tok, std::list<const Token
23760

23861
// 2nd parameter..
23962
if ((value == 0 && Token::Match(secondParam, "0|NULL ,|)")) || (secondParam && secondParam->varId() > 0 && Token::Match(secondParam->next(),"[,)]"))) {
240-
if (functionNames2_all.find(tok.str()) != functionNames2_all.end())
241-
var.push_back(secondParam);
242-
else if (value == 0 && functionNames2_nullptr.find(tok.str()) != functionNames2_nullptr.end())
243-
var.push_back(secondParam);
244-
else if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),2))
63+
if (value == 0 && library != nullptr && library->isnullargbad(tok.str(),2))
24564
var.push_back(secondParam);
24665
else if (value == 1 && library != nullptr && library->isuninitargbad(tok.str(),2))
24766
var.push_back(secondParam);

0 commit comments

Comments
 (0)