From 2295200e13196c7dd850bf3aa5bbe9b88e959790 Mon Sep 17 00:00:00 2001 From: Ondrej Mosnacek Date: Tue, 2 Feb 2021 12:18:12 +0100 Subject: [PATCH] Backport a fix for nullPointerRedundantCheck Add a patch backported from upstream that fixes a bug which breaks the build of libkcapi (https://bugzilla.redhat.com/show_bug.cgi?id=1923600). Signed-off-by: Ondrej Mosnacek --- ...FP-nullPointerRedundantCheck-when-us.patch | 64 +++++++++++++++++++ cppcheck.spec | 4 ++ 2 files changed, 68 insertions(+) create mode 100644 cppcheck-2.3-Fix-issue-10024-FP-nullPointerRedundantCheck-when-us.patch diff --git a/cppcheck-2.3-Fix-issue-10024-FP-nullPointerRedundantCheck-when-us.patch b/cppcheck-2.3-Fix-issue-10024-FP-nullPointerRedundantCheck-when-us.patch new file mode 100644 index 0000000..8e9e799 --- /dev/null +++ b/cppcheck-2.3-Fix-issue-10024-FP-nullPointerRedundantCheck-when-us.patch @@ -0,0 +1,64 @@ +From 5c4dc7f32978243db8ea10153b3cd84d116a1d10 Mon Sep 17 00:00:00 2001 +From: Paul Fultz II +Date: Mon, 14 Dec 2020 04:13:47 -0600 +Subject: [PATCH] Fix issue 10024: FP: nullPointerRedundantCheck when using a + goto statement (#2947) + +(cherry picked from commit da1375c9a3f3a3b7eae7aece5e2ba03e59973aa0) +--- + lib/reverseanalyzer.cpp | 2 ++ + test/testnullpointer.cpp | 18 ++++++++++++++++++ + 2 files changed, 20 insertions(+) + +diff --git a/lib/reverseanalyzer.cpp b/lib/reverseanalyzer.cpp +index a6a86f63e..31deda58d 100644 +--- a/lib/reverseanalyzer.cpp ++++ b/lib/reverseanalyzer.cpp +@@ -124,6 +124,8 @@ struct ReverseTraversal { + } + if (Token::Match(tok, "return|break|continue")) + break; ++ if (Token::Match(tok, "%name% :")) ++ break; + // Evaluate LHS of assignment before RHS + if (Token* assignTok = assignExpr(tok)) { + Token* assignTop = assignTok; +diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp +index 94d772911..8a3738fe9 100644 +--- a/test/testnullpointer.cpp ++++ b/test/testnullpointer.cpp +@@ -106,6 +106,7 @@ private: + TEST_CASE(nullpointer63); + TEST_CASE(nullpointer64); + TEST_CASE(nullpointer65); // #9980 ++ TEST_CASE(nullpointer66); // #10024 + TEST_CASE(nullpointer_addressOf); // address of + TEST_CASE(nullpointerSwitch); // #2626 + TEST_CASE(nullpointer_cast); // #4692 +@@ -2032,6 +2033,23 @@ private: + ASSERT_EQUALS("", errout.str()); + } + ++ void nullpointer66() { ++ check("int f() {\n" ++ " int ret = 0;\n" ++ " int *v = nullptr;\n" ++ " if (!MyAlloc(&v)) {\n" ++ " ret = -1;\n" ++ " goto done;\n" ++ " }\n" ++ " DoSomething(*v);\n" ++ "done:\n" ++ " if (v)\n" ++ " MyFree(&v);\n" ++ " return ret;\n" ++ "}\n"); ++ ASSERT_EQUALS("", errout.str()); ++ } ++ + void nullpointer_addressOf() { // address of + check("void f() {\n" + " struct X *x = 0;\n" +-- +2.29.2 + diff --git a/cppcheck.spec b/cppcheck.spec index d0747b2..18b799a 100644 --- a/cppcheck.spec +++ b/cppcheck.spec @@ -14,6 +14,9 @@ Patch0: cppcheck-2.2-translations.patch Patch1: cppcheck-1.88-htmlreport-python3.patch # Fix for missing #include with gcc-11 Patch2: cppcheck-2.3-gcc11.patch +# da1375c9a3f3 ("Fix issue 10024: FP: nullPointerRedundantCheck +# when using a goto statement (#2947)") +Patch3: cppcheck-2.3-Fix-issue-10024-FP-nullPointerRedundantCheck-when-us.patch BuildRequires: gcc-c++ BuildRequires: pcre-devel @@ -60,6 +63,7 @@ from xml files first generated using cppcheck. %patch0 -p1 -b .translations %patch1 -p1 -b .python3 %patch2 -p1 -b .gcc11 +%patch3 -p1 -b .nullptrcheck # Make sure bundled tinyxml2 is not used rm -r externals/tinyxml2 # Generate the Qt online-help file