diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-02-02 18:38:21 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-02-15 15:44:51 +0100 |
commit | d34c3f9e94c795cf0875e49239349cb767500f89 (patch) | |
tree | c49c3c02f360647ace2aefbdd3bf65b5161701e9 /src/corelib/plugin/qlibrary.cpp | |
parent | 1559cd8ff23b46a1e708f5d0093100acb9877028 (diff) |
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 <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/plugin/qlibrary.cpp')
-rw-r--r-- | src/corelib/plugin/qlibrary.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
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); |