diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 91c819772..22433df82 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1179,13 +1179,6 @@ void CheckBufferOverrun::checkGlobalAndLocalVariable() type = tok->strAt(4); var = tok->next()->variable(); nextTok = 8; - } else if (Token::Match(tok, "[;{}] %var% = %str% ;") && - tok->next()->variable() && - tok->next()->variable()->isPointer()) { - size = 1 + int(tok->tokAt(3)->strValue().size()); - type = "char"; - var = tok->next()->variable(); - nextTok = 4; } else if (Token::Match(tok, "[*;{}] %var% = malloc|alloca ( %num% ) ;")) { size = MathLib::toLongNumber(tok->strAt(5)); type = "char"; // minimum type, typesize=1 diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 1666d8ddc..7df55bd29 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1997,6 +1997,11 @@ private: "}"); ASSERT_EQUALS("[test.cpp:4]: (error) Array 'str[4]' accessed at index 4, which is out of bounds.\n", errout.str()); + check("void f() {\n" // #6973 + " const char *name = \"\";\n" + " if ( name[0] == 'U' ? name[1] : 0) {}\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void array_index_same_struct_and_var_name() {