From d34c3f9e94c795cf0875e49239349cb767500f89 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 2 Feb 2022 18:38:21 +0100 Subject: QLibrary: use QStaticByteArrayMatcher Because of code-after-return style, I don't actually know what the code is used for, but since it's compiled, make sure to not leave a dynamically-initialized static variable lying around, even if control never reaches it. Pick-to: 6.3 Change-Id: I6ce30d8c060f96a2d819ed85f79d18a7ef7e9b05 Reviewed-by: Qt CI Bot Reviewed-by: Thiago Macieira --- src/corelib/plugin/qlibrary.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/corelib/plugin') diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 6e08e73f23..ac33f16268 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -210,8 +210,16 @@ static QLibraryScanResult qt_find_pattern(const char *s, qsizetype s_len, QStrin #elif defined(Q_OS_WIN) return QCoffPeParser::parse({s, s_len}, errMsg); #endif - QByteArrayView pattern = QPluginMetaData::MagicString; - static const QByteArrayMatcher matcher(pattern.toByteArray()); + static constexpr auto matcher = [] { + // QPluginMetaData::MagicString is not NUL-terminated, but + // qMakeStaticByteArrayMatcher requires its argument to be, so + // duplicate here, but statically check we didn't mess up: + constexpr auto &pattern = "QTMETADATA !"; + constexpr auto magic = std::string_view(QPluginMetaData::MagicString, + sizeof(QPluginMetaData::MagicString)); + static_assert(pattern == magic); + return qMakeStaticByteArrayMatcher(pattern); + }(); qsizetype i = matcher.indexIn(s, s_len); if (i < 0) { *errMsg = QLibrary::tr("'%1' is not a Qt plugin").arg(*errMsg); -- cgit v1.2.3