From db61234f3b711a409509ab5d340a106a80c74c6e Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sun, 21 Dec 2025 22:15:01 +0100 Subject: [PATCH 1/2] Fix #14340 FN containerOutOfBounds with std::initializer_list --- cfg/std.cfg | 10 ++++++++++ test/cfg/std.cpp | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/cfg/std.cfg b/cfg/std.cfg index 84cffb79828..fe43af1ec19 100644 --- a/cfg/std.cfg +++ b/cfg/std.cfg @@ -9009,6 +9009,16 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init + + + + + + + + + + diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp index 455dbf7df7c..8a9976a94ae 100644 --- a/test/cfg/std.cpp +++ b/test/cfg/std.cpp @@ -5307,3 +5307,15 @@ void containerOutOfBounds_std_string(std::string &var) { // #11403 // TODO cppcheck-suppress containerOutOfBounds var+= s5[3]; } + +int containerOutOfBounds_std_initializer_list_access(const std::vector& v) { + // cppcheck-suppress containerOutOfBounds + return v[2]; +} + +int containerOutOfBounds_std_initializer_list() { // #14340 + std::initializer_list x{ 1, 2 }; + // cppcheck-suppress derefInvalidIterator + int i = *x.end(); + return i + containerOutOfBounds_std_initializer_list_access(x); +} \ No newline at end of file From 3a7f2189070d6d92836e0964da7a9878a8fa52f7 Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sun, 21 Dec 2025 23:11:04 +0100 Subject: [PATCH 2/2] Fix --- lib/checkother.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/checkother.cpp b/lib/checkother.cpp index e1728788ecb..df842260906 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -1513,6 +1513,8 @@ void CheckOther::commaSeparatedReturnError(const Token *tok) static bool isLargeContainer(const Variable* var, const Settings& settings) { const ValueType* vt = var->valueType(); + if (vt->container->startPattern == "std :: initializer_list <") + return false; if (vt->container->size_templateArgNo < 0) return true; const std::size_t maxByValueSize = 2 * settings.platform.sizeof_pointer;