diff --git a/lib/checkfunctions.cpp b/lib/checkfunctions.cpp index 1c0ba58f6..8fdf20d29 100644 --- a/lib/checkfunctions.cpp +++ b/lib/checkfunctions.cpp @@ -174,7 +174,7 @@ void CheckFunctions::invalidFunctionUsage() const Token* strTok = varTok->getValueTokenMinStrSize(mSettings); if (strTok) { const int strSize = Token::getStrArraySize(strTok); - if (strSize > count) + if (strSize > count && strTok->str().find('\0') == std::string::npos) invalidFunctionArgStrError(argtok, functionToken->str(), argnr); } } diff --git a/test/testfunctions.cpp b/test/testfunctions.cpp index 550d869bd..eef345b5d 100644 --- a/test/testfunctions.cpp +++ b/test/testfunctions.cpp @@ -729,6 +729,12 @@ private: " strcat(dest, if_name);\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("int f() {\n" + " const char c[3] = \"ab\\0\";\n" + " return strlen(c);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void mathfunctionCall_sqrt() {