diff --git a/Cppcheck.xcodeproj/project.pbxproj b/Cppcheck.xcodeproj/project.pbxproj index bee99782e..6a534c196 100644 --- a/Cppcheck.xcodeproj/project.pbxproj +++ b/Cppcheck.xcodeproj/project.pbxproj @@ -12,7 +12,7 @@ 39E60EBB1270DE3A00AC0D02 /* checkclass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E911270DE3A00AC0D02 /* checkclass.cpp */; }; 39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E931270DE3A00AC0D02 /* checkexceptionsafety.cpp */; }; 39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; }; - 39E60EBE1270DE3A00AC0D02 /* checkobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */; }; + 39E60EBE1270DE3A00AC0D02 /* checkobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */; }; 39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; }; 39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; }; 39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9D1270DE3A00AC0D02 /* checkstl.cpp */; }; @@ -81,7 +81,7 @@ F4C348821825692B00521683 /* testmemleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9E17AB8511006C06AF /* testmemleak.cpp */; }; F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */; }; F4C348841825692B00521683 /* testnullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA017AB8511006C06AF /* testnullpointer.cpp */; }; - F4C348851825692B00521683 /* testobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */; }; + F4C348851825692B00521683 /* testobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */; }; F4C348861825692B00521683 /* testoptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA217AB8511006C06AF /* testoptions.cpp */; }; F4C348871825692B00521683 /* testother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA317AB8511006C06AF /* testother.cpp */; }; F4C348881825692B00521683 /* testpath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F45BDDA417AB8511006C06AF /* testpath.cpp */; }; @@ -118,7 +118,7 @@ F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */; }; F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC3177F093300CD5A40 /* checknonreentrantfunctions.cpp */; }; F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC5177F093300CD5A40 /* checknullpointer.cpp */; }; - F4C348AA18256A4500521683 /* checkobsoletefunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */; }; + F4C348AA18256A4500521683 /* checkobsolescentfunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */; }; F4C348AB18256A4500521683 /* checkother.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E991270DE3A00AC0D02 /* checkother.cpp */; }; F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */; }; F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4043DC7177F093300CD5A40 /* checksizeof.cpp */; }; @@ -180,8 +180,8 @@ 39E60E941270DE3A00AC0D02 /* checkexceptionsafety.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkexceptionsafety.h; path = lib/checkexceptionsafety.h; sourceTree = ""; }; 39E60E951270DE3A00AC0D02 /* checkmemoryleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkmemoryleak.cpp; path = lib/checkmemoryleak.cpp; sourceTree = ""; }; 39E60E961270DE3A00AC0D02 /* checkmemoryleak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkmemoryleak.h; path = lib/checkmemoryleak.h; sourceTree = ""; }; - 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkobsoletefunctions.cpp; path = lib/checkobsoletefunctions.cpp; sourceTree = ""; }; - 39E60E981270DE3A00AC0D02 /* checkobsoletefunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkobsoletefunctions.h; path = lib/checkobsoletefunctions.h; sourceTree = ""; }; + 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkobsolescentfunctions.cpp; path = lib/checkobsolescentfunctions.cpp; sourceTree = ""; }; + 39E60E981270DE3A00AC0D02 /* checkobsolescentfunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkobsolescentfunctions.h; path = lib/checkobsolescentfunctions.h; sourceTree = ""; }; 39E60E991270DE3A00AC0D02 /* checkother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkother.cpp; path = lib/checkother.cpp; sourceTree = ""; }; 39E60E9A1270DE3A00AC0D02 /* checkother.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = checkother.h; path = lib/checkother.h; sourceTree = ""; }; 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkpostfixoperator.cpp; path = lib/checkpostfixoperator.cpp; sourceTree = ""; }; @@ -287,7 +287,7 @@ F45BDD9E17AB8511006C06AF /* testmemleak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testmemleak.cpp; path = test/testmemleak.cpp; sourceTree = ""; }; F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnonreentrantfunctions.cpp; path = test/testnonreentrantfunctions.cpp; sourceTree = ""; }; F45BDDA017AB8511006C06AF /* testnullpointer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testnullpointer.cpp; path = test/testnullpointer.cpp; sourceTree = ""; }; - F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testobsoletefunctions.cpp; path = test/testobsoletefunctions.cpp; sourceTree = ""; }; + F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testobsolescentfunctions.cpp; path = test/testobsolescentfunctions.cpp; sourceTree = ""; }; F45BDDA217AB8511006C06AF /* testoptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testoptions.cpp; path = test/testoptions.cpp; sourceTree = ""; }; F45BDDA317AB8511006C06AF /* testother.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testother.cpp; path = test/testother.cpp; sourceTree = ""; }; F45BDDA417AB8511006C06AF /* testpath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = testpath.cpp; path = test/testpath.cpp; sourceTree = ""; }; @@ -426,8 +426,8 @@ F4043DC4177F093300CD5A40 /* checknonreentrantfunctions.h */, F4043DC5177F093300CD5A40 /* checknullpointer.cpp */, F4043DC6177F093300CD5A40 /* checknullpointer.h */, - 39E60E971270DE3A00AC0D02 /* checkobsoletefunctions.cpp */, - 39E60E981270DE3A00AC0D02 /* checkobsoletefunctions.h */, + 39E60E971270DE3A00AC0D02 /* checkobsolescentfunctions.cpp */, + 39E60E981270DE3A00AC0D02 /* checkobsolescentfunctions.h */, 39E60E991270DE3A00AC0D02 /* checkother.cpp */, 39E60E9A1270DE3A00AC0D02 /* checkother.h */, 39E60E9B1270DE3A00AC0D02 /* checkpostfixoperator.cpp */, @@ -515,7 +515,7 @@ F45BDD9E17AB8511006C06AF /* testmemleak.cpp */, F45BDD9F17AB8511006C06AF /* testnonreentrantfunctions.cpp */, F45BDDA017AB8511006C06AF /* testnullpointer.cpp */, - F45BDDA117AB8511006C06AF /* testobsoletefunctions.cpp */, + F45BDDA117AB8511006C06AF /* testobsolescentfunctions.cpp */, F45BDDA217AB8511006C06AF /* testoptions.cpp */, F45BDDA317AB8511006C06AF /* testother.cpp */, F45BDDA417AB8511006C06AF /* testpath.cpp */, @@ -649,7 +649,7 @@ F4CDD6981880888F006CF685 /* valueflow.cpp in Sources */, 39E60EBC1270DE3A00AC0D02 /* checkexceptionsafety.cpp in Sources */, 39E60EBD1270DE3A00AC0D02 /* checkmemoryleak.cpp in Sources */, - 39E60EBE1270DE3A00AC0D02 /* checkobsoletefunctions.cpp in Sources */, + 39E60EBE1270DE3A00AC0D02 /* checkobsolescentfunctions.cpp in Sources */, 39E60EBF1270DE3A00AC0D02 /* checkother.cpp in Sources */, 39E60EC01270DE3A00AC0D02 /* checkpostfixoperator.cpp in Sources */, 39E60EC11270DE3A00AC0D02 /* checkstl.cpp in Sources */, @@ -715,7 +715,7 @@ F4C348A718256A4500521683 /* checkmemoryleak.cpp in Sources */, F4C348A818256A4500521683 /* checknonreentrantfunctions.cpp in Sources */, F4C348A918256A4500521683 /* checknullpointer.cpp in Sources */, - F4C348AA18256A4500521683 /* checkobsoletefunctions.cpp in Sources */, + F4C348AA18256A4500521683 /* checkobsolescentfunctions.cpp in Sources */, F4C348AB18256A4500521683 /* checkother.cpp in Sources */, F4C348AC18256A4500521683 /* checkpostfixoperator.cpp in Sources */, F4C348AD18256A4500521683 /* checksizeof.cpp in Sources */, @@ -761,7 +761,7 @@ F4C348821825692B00521683 /* testmemleak.cpp in Sources */, F4C348831825692B00521683 /* testnonreentrantfunctions.cpp in Sources */, F4C348841825692B00521683 /* testnullpointer.cpp in Sources */, - F4C348851825692B00521683 /* testobsoletefunctions.cpp in Sources */, + F4C348851825692B00521683 /* testobsolescentfunctions.cpp in Sources */, F4C348861825692B00521683 /* testoptions.cpp in Sources */, F4C348871825692B00521683 /* testother.cpp in Sources */, F4C348881825692B00521683 /* testpath.cpp in Sources */, diff --git a/Makefile b/Makefile index 6ff34db02..0e709a2eb 100644 --- a/Makefile +++ b/Makefile @@ -131,7 +131,7 @@ LIBOBJ = $(SRCDIR)/check.o \ $(SRCDIR)/checkmemoryleak.o \ $(SRCDIR)/checknonreentrantfunctions.o \ $(SRCDIR)/checknullpointer.o \ - $(SRCDIR)/checkobsoletefunctions.o \ + $(SRCDIR)/checkobsolescentfunctions.o \ $(SRCDIR)/checkother.o \ $(SRCDIR)/checkpostfixoperator.o \ $(SRCDIR)/checksizeof.o \ @@ -191,7 +191,7 @@ TESTOBJ = test/options.o \ test/testmemleak.o \ test/testnonreentrantfunctions.o \ test/testnullpointer.o \ - test/testobsoletefunctions.o \ + test/testobsolescentfunctions.o \ test/testoptions.o \ test/testother.o \ test/testpath.o \ @@ -323,8 +323,8 @@ $(SRCDIR)/checknonreentrantfunctions.o: lib/checknonreentrantfunctions.cpp lib/c $(SRCDIR)/checknullpointer.o: lib/checknullpointer.cpp lib/cxx11emu.h lib/checknullpointer.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checknullpointer.o $(SRCDIR)/checknullpointer.cpp -$(SRCDIR)/checkobsoletefunctions.o: lib/checkobsoletefunctions.cpp lib/cxx11emu.h lib/checkobsoletefunctions.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h - $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkobsoletefunctions.o $(SRCDIR)/checkobsoletefunctions.cpp +$(SRCDIR)/checkobsolescentfunctions.o: lib/checkobsolescentfunctions.cpp lib/cxx11emu.h lib/checkobsolescentfunctions.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h + $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkobsolescentfunctions.o $(SRCDIR)/checkobsolescentfunctions.cpp $(SRCDIR)/checkother.o: lib/checkother.cpp lib/cxx11emu.h lib/checkother.h lib/config.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/tokenize.h lib/errorlogger.h lib/suppressions.h lib/tokenlist.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h lib/symboldatabase.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o $(SRCDIR)/checkother.o $(SRCDIR)/checkother.cpp @@ -497,8 +497,8 @@ test/testnonreentrantfunctions.o: test/testnonreentrantfunctions.cpp lib/cxx11em test/testnullpointer.o: test/testnullpointer.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checknullpointer.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testnullpointer.o test/testnullpointer.cpp -test/testobsoletefunctions.o: test/testobsoletefunctions.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checkobsoletefunctions.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h - $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testobsoletefunctions.o test/testobsoletefunctions.cpp +test/testobsolescentfunctions.o: test/testobsolescentfunctions.cpp lib/cxx11emu.h lib/tokenize.h lib/errorlogger.h lib/config.h lib/suppressions.h lib/tokenlist.h lib/checkobsolescentfunctions.h lib/check.h lib/token.h lib/valueflow.h lib/mathlib.h lib/settings.h lib/library.h lib/path.h lib/standards.h lib/timer.h test/testsuite.h test/redirect.h + $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testobsolescentfunctions.o test/testobsolescentfunctions.cpp test/testoptions.o: test/testoptions.cpp lib/cxx11emu.h test/options.h test/testsuite.h lib/errorlogger.h lib/config.h lib/suppressions.h test/redirect.h lib/library.h lib/path.h lib/mathlib.h lib/token.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CFG) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -std=c++0x -c -o test/testoptions.o test/testoptions.cpp diff --git a/cppcheck.cbp b/cppcheck.cbp index e79b38d0d..b3a9a3790 100644 --- a/cppcheck.cbp +++ b/cppcheck.cbp @@ -126,8 +126,8 @@ - - + + @@ -191,7 +191,7 @@ - + diff --git a/gui/test/data/xmlfiles/xmlreport_v1.xml b/gui/test/data/xmlfiles/xmlreport_v1.xml index 3dc4887f6..a2043cd66 100644 --- a/gui/test/data/xmlfiles/xmlreport_v1.xml +++ b/gui/test/data/xmlfiles/xmlreport_v1.xml @@ -4,6 +4,6 @@ - + diff --git a/gui/test/data/xmlfiles/xmlreport_v2.xml b/gui/test/data/xmlfiles/xmlreport_v2.xml index 81ed96496..31af1a92c 100644 --- a/gui/test/data/xmlfiles/xmlreport_v2.xml +++ b/gui/test/data/xmlfiles/xmlreport_v2.xml @@ -15,7 +15,7 @@ - + diff --git a/lib/checkobsoletefunctions.cpp b/lib/checkobsoletefunctions.cpp deleted file mode 100644 index e209276e9..000000000 --- a/lib/checkobsoletefunctions.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Cppcheck - A tool for static C/C++ code analysis - * Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//--------------------------------------------------------------------------- -// Obsolete functions -//--------------------------------------------------------------------------- - -#include "checkobsoletefunctions.h" -#include "symboldatabase.h" - -//--------------------------------------------------------------------------- - - -// Register this check class (by creating a static instance of it) -namespace { - CheckObsoleteFunctions instance; -} - -void CheckObsoleteFunctions::obsoleteFunctions() -{ - if (!_settings->isEnabled("style")) - return; - - const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase(); - - // Functions defined somewhere? - for (unsigned int i = 0; i < symbolDatabase->functionScopes.size(); i++) { - const Scope* scope = symbolDatabase->functionScopes[i]; - _obsoleteStandardFunctions.erase(scope->className); - _obsoletePosixFunctions.erase(scope->className); - _obsoleteC99Functions.erase(scope->className); - } - - for (unsigned int i = 0; i < symbolDatabase->functionScopes.size(); i++) { - const Scope* scope = symbolDatabase->functionScopes[i]; - for (const Token* tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) { - if (tok->isName() && tok->varId()==0 && (tok->next() && tok->next()->str() == "(") && - (!Token::Match(tok->previous(), ".|::") || Token::simpleMatch(tok->tokAt(-2), "std ::"))) { - - std::map::const_iterator it = _obsoleteStandardFunctions.find(tok->str()); - if (it != _obsoleteStandardFunctions.end()) { - // If checking an old code base it might be uninteresting to update obsolete functions. - reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second); - } else { - if (_settings->standards.posix) { - it = _obsoletePosixFunctions.find(tok->str()); - if (it != _obsoletePosixFunctions.end()) { - // If checking an old code base it might be uninteresting to update obsolete functions. - reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second); - } - } - if (_settings->standards.c >= Standards::C99) { - // alloca : this function is obsolete in C but not in C++ (#4382) - it = _obsoleteC99Functions.find(tok->str()); - if (it != _obsoleteC99Functions.end() && !(tok->str() == "alloca" && _tokenizer->isCPP())) { - reportError(tok, Severity::style, "obsoleteFunctions"+it->first, it->second); - } - } - } - } - } - } -} -//--------------------------------------------------------------------------- diff --git a/lib/checkobsoletefunctions.h b/lib/checkobsoletefunctions.h deleted file mode 100644 index 7925a4019..000000000 --- a/lib/checkobsoletefunctions.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Cppcheck - A tool for static C/C++ code analysis - * Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -//--------------------------------------------------------------------------- -#ifndef checkobsoletefunctionsH -#define checkobsoletefunctionsH -//--------------------------------------------------------------------------- - -#include "config.h" -#include "check.h" -#include -#include - - -/// @addtogroup Checks -/// @{ - -/** - * @brief Using obsolete functions that are always insecure to use. - */ - -class CPPCHECKLIB CheckObsoleteFunctions : public Check { -public: - /** This constructor is used when registering the CheckObsoleteFunctions */ - CheckObsoleteFunctions() : Check(myName()) { - initObsoleteFunctions(); - } - - /** This constructor is used when running checks. */ - CheckObsoleteFunctions(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) - : Check(myName(), tokenizer, settings, errorLogger) { - initObsoleteFunctions(); - } - - void runSimplifiedChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) { - CheckObsoleteFunctions checkObsoleteFunctions(tokenizer, settings, errorLogger); - checkObsoleteFunctions.obsoleteFunctions(); - } - - /** Check for obsolete functions */ - void obsoleteFunctions(); - -private: - /* function name / error message */ - std::map _obsoleteStandardFunctions; - std::map _obsoletePosixFunctions; - std::map _obsoleteC99Functions; - - /** init obsolete functions list ' */ - void initObsoleteFunctions() { - // Obsolete posix functions, which messages suggest only one alternative and doesn't contain additional information. - const struct { - const char* bad; - const char* good; - } posix_stdmsgs[] = { - {"bsd_signal", "sigaction"}, - {"gethostbyaddr", "getnameinfo"}, - {"gethostbyname", "getaddrinfo"}, - {"bcmp", "memcmp"}, - {"bzero", "memset"}, - {"ecvt", "sprintf"}, - {"fcvt", "sprintf"}, - {"gcvt", "sprintf"}, - {"getwd", "getcwd"}, - {"index", "strchr"}, // See #2334 (using the Qt Model/View function 'index') - {"rindex", "strrchr"}, - {"pthread_attr_getstackaddr", "pthread_attr_getstack"}, - {"pthread_attr_setstackaddr", "pthread_attr_setstack"}, - {"vfork", "fork"}, - {"wcswcs", "wcsstr"}, - {"rand_r", "rand"}, - {"utime", "utimensat"}, - {"asctime_r", "strftime"}, - {"ctime_r", "strftime"} - }; - - for (std::size_t i = 0; i < (sizeof(posix_stdmsgs) / sizeof(*posix_stdmsgs)); ++i) { - _obsoletePosixFunctions[posix_stdmsgs[i].bad] = "Obsolete function '" + std::string(posix_stdmsgs[i].bad) + "' called. It is recommended to use the function '" + posix_stdmsgs[i].good + "' instead."; - } - - _obsoletePosixFunctions["usleep"] = "Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n" - "The obsolete function 'usleep' is called. POSIX.1-2001 declares usleep() function obsolete and POSIX.1-2008 removes it. It is recommended that new applications use the 'nanosleep' or 'setitimer' function."; - - _obsoletePosixFunctions["bcopy"] = "Obsolete function 'bcopy' called. It is recommended to use the 'memmove' or 'memcpy' function instead."; - - _obsoletePosixFunctions["ftime"] = "Obsolete function 'ftime' called. It is recommended to use time(), gettimeofday() or clock_gettime() instead."; - - _obsoletePosixFunctions["getcontext"] = "Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads."; - _obsoletePosixFunctions["makecontext"] = "Obsolete function 'makecontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads."; - _obsoletePosixFunctions["swapcontext"] = "Obsolete function 'swapcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads."; - - _obsoletePosixFunctions["scalbln"] = "Obsolete function 'scalb' called. It is recommended to use 'scalbln', 'scalblnf' or 'scalblnl' instead."; - - _obsoletePosixFunctions["ualarm"] = "Obsolete function 'ualarm' called. It is recommended to use 'timer_create', 'timer_delete', 'timer_getoverrun', 'timer_gettime' or 'timer_settime' instead."; - - _obsoletePosixFunctions["tmpnam"] = "Obsolete function 'tmpnam' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead."; - - _obsoletePosixFunctions["tmpnam_r"] = "Obsolete function 'tmpnam_r' called. It is recommended to use 'tmpfile', 'mkstemp' or 'mkdtemp' instead."; - - _obsoleteStandardFunctions["gets"] = "Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n" - "The obsolete function 'gets' is called. With 'gets' you'll get a buffer overrun if the input data exceeds the size of the buffer. It is recommended to use the function 'fgets' instead."; - _obsoleteC99Functions["alloca"] = "Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n" - "The obsolete function 'alloca' is called. In C99 and later it is recommended to use a variable length array or a dynamically allocated array instead. The function 'alloca' is dangerous for many reasons (http://stackoverflow.com/questions/1018853/why-is-alloca-not-considered-good-practice and http://linux.die.net/man/3/alloca)."; - _obsoleteC99Functions["asctime"] = "Obsolete function 'asctime' called. It is recommended to use the function 'strftime' instead."; - // ctime is obsolete - it's not threadsafe. but there is no good replacement. - //_obsoleteC99Functions["ctime"] = "Obsolete function 'ctime' called. It is recommended to use the function 'strftime' instead."; - } - - void getErrorMessages(ErrorLogger *errorLogger, const Settings *settings) const { - CheckObsoleteFunctions c(0, settings, errorLogger); - - std::map::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end()); - for (; it!=itend; ++it) { - c.reportError(0, Severity::style, "obsoleteFunctions"+it->first, it->second); - } - } - - static std::string myName() { - return "Obsolete functions"; - } - - std::string classInfo() const { - std::string info = "Warn if any of these obsolete functions are used:\n"; - std::map::const_iterator it(_obsoletePosixFunctions.begin()), itend(_obsoletePosixFunctions.end()); - for (; it!=itend; ++it) { - info += "* " + it->first + "\n"; - } - return info; - } -}; -/// @} -//--------------------------------------------------------------------------- -#endif // checkobsoletefunctionsH diff --git a/lib/cppcheck.vcxproj b/lib/cppcheck.vcxproj index 2f00f9012..515b7d790 100644 --- a/lib/cppcheck.vcxproj +++ b/lib/cppcheck.vcxproj @@ -53,7 +53,7 @@ - + @@ -99,7 +99,7 @@ - + diff --git a/lib/cppcheck.vcxproj.filters b/lib/cppcheck.vcxproj.filters index c56e34c29..f3b851586 100644 --- a/lib/cppcheck.vcxproj.filters +++ b/lib/cppcheck.vcxproj.filters @@ -38,7 +38,7 @@ Source Files - + Source Files @@ -163,7 +163,7 @@ Header Files - + Header Files diff --git a/lib/lib.pri b/lib/lib.pri index 09ae516dd..aac8fd73e 100644 --- a/lib/lib.pri +++ b/lib/lib.pri @@ -22,7 +22,7 @@ HEADERS += $${BASEPATH}check.h \ $${BASEPATH}checkmemoryleak.h \ $${BASEPATH}checknonreentrantfunctions.h \ $${BASEPATH}checknullpointer.h \ - $${BASEPATH}checkobsoletefunctions.h \ + $${BASEPATH}checkobsolescentfunctions.h \ $${BASEPATH}checkother.h \ $${BASEPATH}checkpostfixoperator.h \ $${BASEPATH}checksizeof.h \ @@ -67,7 +67,7 @@ SOURCES += $${BASEPATH}check.cpp \ $${BASEPATH}checkmemoryleak.cpp \ $${BASEPATH}checknonreentrantfunctions.cpp \ $${BASEPATH}checknullpointer.cpp \ - $${BASEPATH}checkobsoletefunctions.cpp \ + $${BASEPATH}checkobsolescentfunctions.cpp \ $${BASEPATH}checkother.cpp \ $${BASEPATH}checkpostfixoperator.cpp \ $${BASEPATH}checksizeof.cpp \ diff --git a/test/testfiles.pri b/test/testfiles.pri index 606f4de6e..d02f71a29 100644 --- a/test/testfiles.pri +++ b/test/testfiles.pri @@ -27,7 +27,7 @@ SOURCES += $${BASEPATH}/test64bit.cpp \ $${BASEPATH}/testmemleak.cpp \ $${BASEPATH}/testnonreentrantfunctions.cpp \ $${BASEPATH}/testnullpointer.cpp \ - $${BASEPATH}/testobsoletefunctions.cpp \ + $${BASEPATH}/testobsolescentfunctions.cpp \ $${BASEPATH}/testoptions.cpp \ $${BASEPATH}/testother.cpp \ $${BASEPATH}/testpath.cpp \ diff --git a/test/testobsoletefunctions.cpp b/test/testobsoletefunctions.cpp deleted file mode 100644 index 1b7b17357..000000000 --- a/test/testobsoletefunctions.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Cppcheck - A tool for static C/C++ code analysis - * Copyright (C) 2007-2014 Daniel Marjamäki and Cppcheck team. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - -#include "tokenize.h" -#include "checkobsoletefunctions.h" -#include "testsuite.h" - -#include - -extern std::ostringstream errout; - -class TestObsoleteFunctions : public TestFixture { -public: - TestObsoleteFunctions() : TestFixture("TestObsoleteFunctions") { - } - -private: - - void run() { - TEST_CASE(testbsd_signal); - TEST_CASE(testgethostbyname); - TEST_CASE(testgethostbyaddr); - TEST_CASE(testusleep); - TEST_CASE(testindex); - TEST_CASE(test_qt_index); // FP when using the Qt function 'index'? - TEST_CASE(testrindex); - - // no false positives for variables - TEST_CASE(testvar); - - // dangerous function - TEST_CASE(testgets); - - TEST_CASE(testalloca); - - // declared function ticket #3121 - TEST_CASE(test_declared_function); - - // test std::gets - TEST_CASE(test_std_gets); - - // multiple use of obsolete functions - TEST_CASE(test_multiple); - - // c declared function - TEST_CASE(test_c_declaration); - - // function with body - TEST_CASE(test_function_with_body); - - // null pointer dereference in obsoleteFunctions - TEST_CASE(ticket3238); - } - - void check(const char code[], const char filename[]="test.cpp") { - // Clear the error buffer.. - errout.str(""); - - Settings settings; - settings.addEnabled("style"); - settings.standards.posix = true; - settings.standards.c = Standards::C11; - - // Tokenize.. - Tokenizer tokenizer(&settings, this); - std::istringstream istr(code); - tokenizer.tokenize(istr, filename); - tokenizer.simplifyTokenList2(); - - // Check for obsolete functions.. - CheckObsoleteFunctions checkObsoleteFunctions(&tokenizer, &settings, this); - checkObsoleteFunctions.obsoleteFunctions(); - } - - void testbsd_signal() { - check("void f()\n" - "{\n" - " bsd_signal(SIGABRT, SIG_IGN);\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'bsd_signal' called. It is recommended to use the function 'sigaction' instead.\n", errout.str()); - - check("int f()\n" - "{\n" - " int bsd_signal(0);\n" - " return bsd_signal;\n" - "}"); - ASSERT_EQUALS("", errout.str()); - } - - - void testgethostbyname() { - check("void f()\n" - "{\n" - " struct hostent *hp;\n" - " if(!hp = gethostbyname('127.0.0.1')) {\n" - " exit(1);\n" - " }\n" - "}"); - ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'gethostbyname' called. It is recommended to use the function 'getaddrinfo' instead.\n", errout.str()); - } - - void testgethostbyaddr() { - check("void f()\n" - "{\n" - " long addr;\n" - " addr = inet_addr('127.0.0.1');\n" - " if(!hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET)) {\n" - " exit(1);\n" - " }\n" - "}"); - ASSERT_EQUALS("[test.cpp:5]: (style) Obsolete function 'gethostbyaddr' called. It is recommended to use the function 'getnameinfo' instead.\n", errout.str()); - } - - void testusleep() { - check("void f()\n" - "{\n" - " usleep( 1000 );\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n", errout.str()); - } - - void testindex() { - - check("namespace n1 {\n" - " int index(){};\n" - "}\n" - "int main()\n" - "{\n" - " n1::index();\n" - "}"); - ASSERT_EQUALS("", errout.str()); - - check("std::size_t f()\n" - "{\n" - " std::size_t index(0);\n" - " index++;\n" - " return index;\n" - "}"); - ASSERT_EQUALS("", errout.str()); - - check("int f()\n" - "{\n" - " return this->index();\n" - "}"); - ASSERT_EQUALS("", errout.str()); - - check("void f()\n" - "{\n" - " int index( 0 );\n" - "}"); - ASSERT_EQUALS("", errout.str()); - - check("const char f()\n" - "{\n" - " const char var[6] = 'index';\n" - " const char i = index(var, 0);\n" - " return i;\n" - "}"); - ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'index' called. It is recommended to use the function 'strchr' instead.\n", - errout.str()); - } - - void test_qt_index() { - check("void TDataModel::forceRowRefresh(int row) {\n" - " emit dataChanged(index(row, 0), index(row, columnCount() - 1));\n" - "}"); - ASSERT_EQUALS("[test.cpp:2]: (style) Obsolete function 'index' called. It is recommended to use the function 'strchr' instead.\n", errout.str()); - } - - void testrindex() { - check("void f()\n" - "{\n" - " int rindex( 0 );\n" - "}"); - ASSERT_EQUALS("", errout.str()); - - check("void f()\n" - "{\n" - " const char var[7] = 'rindex';\n" - " print(rindex(var, 0));\n" - "}"); - ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'rindex' called. It is recommended to use the function 'strrchr' instead.\n", errout.str()); - } - - - void testvar() { - check("class Fred {\n" - "public:\n" - " Fred() : index(0) { }\n" - " int index;\n" - "};"); - ASSERT_EQUALS("", errout.str()); - } - - void testgets() { - check("void f()\n" - "{\n" - " char *x = gets();\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str()); - - check("void f()\n" - "{\n" - " foo(x, gets());\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str()); - } - - void testalloca() { - check("void f()\n" - "{\n" - " char *x = alloca(10);\n" - "}\n", "test.cpp"); // #4382 - there are no VLAs in C++ - ASSERT_EQUALS("", errout.str()); - - check("void f()\n" - "{\n" - " char *x = alloca(10);\n" - "}\n", "test.c"); - ASSERT_EQUALS("[test.c:3]: (style) Obsolete function 'alloca' called. In C99 and later it is recommended to use a variable length array instead.\n", errout.str()); - } - - // ticket #3121 - void test_declared_function() { - check("int ftime ( int a )\n" - "{\n" - " return a;\n" - "}\n" - "int main ()\n" - "{\n" - " int b ; b = ftime ( 1 ) ;\n" - " return 0 ;\n" - "}"); - ASSERT_EQUALS("", errout.str()); - } - - // test std::gets - void test_std_gets() { - check("void f(char * str)\n" - "{\n" - " char *x = std::gets(str);\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str()); - } - - // multiple use - void test_multiple() { - check("void f(char * str)\n" - "{\n" - " char *x = std::gets(str);\n" - " usleep( 1000 );\n" - "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n" - "[test.cpp:4]: (style) Obsolete function 'usleep' called. It is recommended to use the 'nanosleep' or 'setitimer' function instead.\n", errout.str()); - } - - void test_c_declaration() { - check("char * gets ( char * c ) ;\n" - "int main ()\n" - "{\n" - " char s [ 10 ] ;\n" - " gets ( s ) ;\n" - "}"); - ASSERT_EQUALS("[test.cpp:5]: (style) Obsolete function 'gets' called. It is recommended to use the function 'fgets' instead.\n", errout.str()); - - check("int getcontext(ucontext_t *ucp);\n" - "int f (ucontext_t *ucp)\n" - "{\n" - " getcontext ( ucp ) ;\n" - "}"); - ASSERT_EQUALS("[test.cpp:4]: (style) Obsolete function 'getcontext' called. Due to portability issues, applications are recommended to be rewritten to use POSIX threads.\n", errout.str()); - } - - void test_function_with_body() { - check("char * gets ( char * c ) { return c; }\n" - "int main ()\n" - "{\n" - " char s [ 10 ] ;\n" - " gets ( s ) ;\n" - "}"); - ASSERT_EQUALS("", errout.str()); - } - - void ticket3238() { - check("__FBSDID(\"...\");\n"); - ASSERT_EQUALS("", errout.str()); - } - -}; - -REGISTER_TEST(TestObsoleteFunctions) diff --git a/test/testrunner.vcxproj b/test/testrunner.vcxproj index 974768cce..19ee8072b 100644 --- a/test/testrunner.vcxproj +++ b/test/testrunner.vcxproj @@ -54,7 +54,7 @@ - + diff --git a/test/testrunner.vcxproj.filters b/test/testrunner.vcxproj.filters index 8d91cf650..85adeec95 100644 --- a/test/testrunner.vcxproj.filters +++ b/test/testrunner.vcxproj.filters @@ -70,7 +70,7 @@ Source Files - + Source Files diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 0d960490b..48a808845 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -5682,7 +5682,7 @@ private: ASSERT_EQUALS("int main ( int argc , char * argv [ ] ) { }", tokenizeAndStringify("int main(argc,argv) int argc; char *argv[]; { }")); ASSERT_EQUALS("int f ( int p , int w , float d ) { }", tokenizeAndStringify("int f(p,w,d) float d; { }")); - // #1067 - Not simplified. Feel free to fix so it is simplified correctly but this syntax is obsolete. + // #1067 - Not simplified. Feel free to fix so it is simplified correctly but this syntax is obsolescent. ASSERT_EQUALS("int ( * d ( a , b , c ) ) ( ) int a ; int b ; int c ; { }", tokenizeAndStringify("int (*d(a,b,c))()int a,b,c; { }")); {