diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 09caf41d0..ebdf008db 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -493,7 +493,7 @@ private: for (it = checks.begin(); it != checks.end(); ++it) { UninitVar *c = dynamic_cast(*it); if (c && c->varId == tok.varId()) { - if (c->var->isArray()) + if (c->var->isArray() || c->alloc) bailOutVar(checks, tok.varId()); break; } diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 36552fc57..78aadc953 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1437,6 +1437,15 @@ private: " uintptr_t y = x + 10;\n" // <- not bad usage "}"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar("void f() {\n" + " z_stream strm;\n" + " char* buf = malloc(10);\n" + " strm.next_out = buf;\n" + " deflate(&strm, Z_FINISH);\n" + " memcpy(body, buf, 10);\n" + "}"); + ASSERT_EQUALS("", errout.str()); } // class / struct..