From 26dfddac6bbf521a741eff96e325bf8d1e562fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 24 Dec 2013 12:48:17 +0100 Subject: [PATCH] UninitVar: Fixed false positive when checking if allocated pointer is null --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index c9ab4ee37..259b928f0 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1812,7 +1812,7 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, bool all return (var && var->typeStartToken()->isStandardType()); } - if (vartok->next() && vartok->next()->isOp() && !vartok->next()->isAssignmentOp()) + if (!alloc && vartok->next() && vartok->next()->isOp() && !vartok->next()->isAssignmentOp()) return true; if (vartok->strAt(1) == "]") diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index a9301975c..faa5052f6 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -3342,6 +3342,12 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void f() {\n" + " char *p = malloc(100);\n" + " p || assert_failed();\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // function parameter (treat it as initialized until malloc is used) checkUninitVar2("int f(int *p) {\n" " if (*p == 1) {}\n" // no error