From ad4ea01750b696d0c12e9ab3cfb0eab6922e5e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 12 Aug 2009 18:54:52 +0200 Subject: [PATCH] Fixed #583 (False positive: the nullpointer check doesn't handle goto properly) --- src/checkother.cpp | 8 ++++++++ test/testother.cpp | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/checkother.cpp b/src/checkother.cpp index 7d7c8e755..aa5eea927 100644 --- a/src/checkother.cpp +++ b/src/checkother.cpp @@ -1130,6 +1130,10 @@ void CheckOther::nullPointer() --indentlevel2; } + // goto destination.. + else if (tok2->isName() && Token::simpleMatch(tok2->next(), ":")) + break; + // Reassignment of the struct else if (tok2->varId() == varid1) { @@ -1194,6 +1198,10 @@ void CheckOther::nullPointer() else if (tok1->str() == "{" || tok1->str() == "}") break; + + // goto destination.. + else if (tok1->isName() && Token::simpleMatch(tok1->next(), ":")) + break; } } } diff --git a/test/testother.cpp b/test/testother.cpp index 527989bb3..655901391 100644 --- a/test/testother.cpp +++ b/test/testother.cpp @@ -532,6 +532,15 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + checkNullPointer("void foo(struct ABC *abc)\n" + "{\n" + " int *a = abc->a;\n" + "out:\n" + " if (!abc)\n" + " ;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // loops.. checkNullPointer("void freeAbc(struct ABC *abc)\n" "{\n"