From 433ce58fe637c405f0d2ccb0fe35fa982c9c745c Mon Sep 17 00:00:00 2001 From: orbitcowboy Date: Sat, 4 Jun 2022 12:00:54 +0200 Subject: [PATCH] Fixed FP found with daca@home: ftp://ftp.de.debian.org/debian/pool/main/libs/libslirp/libslirp_4.7.0.orig.tar.bz2; head libslirp-v4.7.0/src/tftp.c:336:20: error: Invalid strcasecmp() argument nr 1. A nul-terminated string is required. [invalidFunctionArgStr] --- lib/checkfunctions.cpp | 2 +- test/testfunctions.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/checkfunctions.cpp b/lib/checkfunctions.cpp index ae1d4cc3b..75538c309 100644 --- a/lib/checkfunctions.cpp +++ b/lib/checkfunctions.cpp @@ -130,7 +130,7 @@ void CheckFunctions::invalidFunctionUsage() if (Token::Match(argtok, "& %var% !![") && argtok->next() && argtok->next()->valueType()) { const ValueType * valueType = argtok->next()->valueType(); const Variable * variable = argtok->next()->variable(); - if ((valueType->type == ValueType::Type::CHAR || (valueType->type == ValueType::Type::RECORD && Token::Match(argtok, "& %var% . %var% !!."))) && + if ((valueType->type == ValueType::Type::CHAR || (valueType->type == ValueType::Type::RECORD && Token::Match(argtok, "& %var% . %var% ,|)"))) && !variable->isArray() && (variable->isConst() || !variable->isGlobal()) && (!argtok->next()->hasKnownValue() || argtok->next()->getValue(0) == nullptr)) { diff --git a/test/testfunctions.cpp b/test/testfunctions.cpp index acf51fe58..8085439ed 100644 --- a/test/testfunctions.cpp +++ b/test/testfunctions.cpp @@ -597,6 +597,15 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + check("struct someStruct {\n" + " char buf[42];\n" + "};\n" + "int f(struct someStruct * const tp, const int k)\n" + "{\n" + " return strcmp(&tp->buf[k], \"needle\");\n" + "}"); + ASSERT_EQUALS("", errout.str()); + check("const char x = 'x'; size_t f() { char y = x; return strlen(&y); }"); ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", errout.str());