From 6ba8e9875a149a39f22bfe5854858b6d162da153 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 23 Jan 2025 19:07:51 +0100 Subject: [PATCH] QDuplicateTracker: don't value-initialize the stack buffer The typical usage of a QDuplicateTracker should be to pass the guesstimate for the number of entries as a constructor argument, or, failing that, default-construct the object. In those cases, everything is peachy: QDuplicateTracker seen(n); QDuplicateTracker seen; But for users that subscribe to a AAA view and use auto seen = QDuplicateTracker{}; or that emplace() a QDuplicateTracker in e.g. std::optional, we need to make sure that value-initializing QDuplicateTracker doesn't value-initialize the internal buffer (which can be several KiB in size). So don't = default the default ctor, but implement it as empty. Amends f21a6d409ea0504c64cd72861fc16b6f3e080086. Pick-to: 6.8 6.5 6.2 5.15 Change-Id: I930f40d2bb85b74d2216378d8b8ca854a53a49e4 Reviewed-by: Dennis Oberst Reviewed-by: Giuseppe D'Angelo Reviewed-by: Thiago Macieira Reviewed-by: Volker Hilsheimer (cherry picked from commit 15154fa4c5d216b1c943a3b37be24f5fb2e4fa73) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/tools/qduplicatetracker_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h index 434285e4907..3e29ede3701 100644 --- a/src/corelib/tools/qduplicatetracker_p.h +++ b/src/corelib/tools/qduplicatetracker_p.h @@ -76,7 +76,7 @@ public: false #endif ; - QDuplicateTracker() = default; + QDuplicateTracker() {} // don't `= default`, lest we value-initialize `buffer` explicit QDuplicateTracker(qsizetype n) #ifdef __cpp_lib_memory_resource : set{size_t(n), &res}