From 71aa9a531a4e448416f399465b239a89420a9249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 27 Sep 2019 13:12:16 +0200 Subject: [PATCH] ExprEngine: Create symbolic expression for string arguments --- lib/exprengine.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/exprengine.cpp b/lib/exprengine.cpp index 54f34b461..e4e842565 100644 --- a/lib/exprengine.cpp +++ b/lib/exprengine.cpp @@ -121,6 +121,13 @@ namespace { void assignValue(const Token *tok, unsigned int varId, ExprEngine::ValuePtr value) { mTrackExecution->symbolRange(tok, value); + if (value) { + if (auto arr = std::dynamic_pointer_cast(value)) { + mTrackExecution->symbolRange(tok, arr->size); + for (const auto &indexAndValue: arr->data) + mTrackExecution->symbolRange(tok, indexAndValue.value); + } + } memory[varId] = value; } @@ -1041,6 +1048,11 @@ static ExprEngine::ValuePtr createVariableValue(const Variable &var, Data &data) auto structValue = createStructVal(valueType->smartPointerType->classScope, var.isLocal() && !var.isStatic(), data); return std::make_shared(data.getNewSymbolName(), structValue, true, false); } + if (valueType->container && valueType->container->stdStringLike) { + auto size = std::make_shared(data.getNewSymbolName(), 0, ~0ULL); + auto value = std::make_shared(data.getNewSymbolName(), -128, 127); + return std::make_shared(data.getNewSymbolName(), size, value); + } return ExprEngine::ValuePtr(); }