Skip to content

Commit 923430d

Browse files
Fix #14518 FP KnownConditionTrueFalse: std::string constructed from char array (danmar#8242)
1 parent d163087 commit 923430d

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

lib/valueflow.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6494,7 +6494,7 @@ static std::vector<ValueFlow::Value> getContainerSizeFromConstructorArgs(const s
64946494
if (args.size() == 1 && args[0]->tokType() == Token::Type::eString)
64956495
return {makeContainerSizeValue(Token::getStrLength(args[0]), known)};
64966496
if (args.size() == 1 && args[0]->variable() && args[0]->variable()->isArray() &&
6497-
args[0]->variable()->isConst() && args[0]->variable()->dimensions().size() == 1)
6497+
args[0]->variable()->isConst() && args[0]->variable()->dimensions().size() == 1 && args[0]->variable()->dimensions()[0].known)
64986498
return {makeContainerSizeValue(args[0]->variable()->dimensions()[0].num, known)};
64996499
if (args.size() == 2 && astIsIntegral(args[1], false)) // { char*, count }
65006500
return {makeContainerSizeValue(args[1], known)};

test/testvalueflow.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7406,6 +7406,12 @@ class TestValueFlow : public TestFixture {
74067406
" return a[0];\n"
74077407
"}";
74087408
ASSERT(!isKnownContainerSizeValue(tokenValues(code, "a ["), 6).empty());
7409+
7410+
code = "void f(const char a[]) {\n" // #14518
7411+
" std::string s(a);\n"
7412+
" if (s.empty()) {}\n"
7413+
"}";
7414+
ASSERT(!isKnownContainerSizeValue(tokenValues(code, "s ."), 0).empty());
74097415
}
74107416

74117417
void valueFlowContainerElement()

0 commit comments

Comments
 (0)