From fa72ec20b26765a5fc3cefc9641fd8a92b8207c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 24 May 2021 15:54:09 +0200 Subject: [PATCH] Uninitialized variables; avoid false positives when passing uninitialized variable to unknown function --- lib/checkuninitvar.cpp | 2 ++ test/testuninitvar.cpp | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 517dd4601..7a3b78190 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1511,6 +1511,8 @@ void CheckUninitVar::valueFlowUninit() continue; if (v->indirect > 1 || v->indirect < 0) continue; + if (v->indirect == 0 && tok->valueType() && tok->valueType()->pointer == 0 && !isVariableUsage(tok, false, NO_ALLOC, 0)) + continue; bool uninitderef = false; if (tok->variable()) { bool unknown; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 9b596cdd8..b361cbec8 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -4601,6 +4601,12 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + valueFlowUninit("void json_parse_nat_type_flags(json_t *root) {\n" + " int index;\n" + " json_array_foreach(root, index, value) {}\n" + "}"); + ASSERT_EQUALS("", errout.str()); + valueFlowUninit("int foo()\n" "{\n" " int i;\n"