diff options
Diffstat (limited to 'src/corelib/plugin/qmachparser.cpp')
-rw-r--r-- | src/corelib/plugin/qmachparser.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/plugin/qmachparser.cpp b/src/corelib/plugin/qmachparser.cpp index 88462b97b2..82dc4bf1c2 100644 --- a/src/corelib/plugin/qmachparser.cpp +++ b/src/corelib/plugin/qmachparser.cpp @@ -194,8 +194,12 @@ QLibraryScanResult QMachOParser::parse(const char *m_s, ulong fdlen, QString *e || Q_UNLIKELY(fdlen < sect[j].offset + sect[j].size)) return notfound(QString(), errorString); + if (sect[j].size < sizeof(QPluginMetaData::MagicHeader)) + return notfound(QLibrary::tr("section .qtmetadata is too small"), errorString); + qsizetype pos = reinterpret_cast<const char *>(header) - m_s + sect[j].offset; - return { pos, qsizetype(sect[j].size) }; + pos += sizeof(QPluginMetaData::MagicString); + return { pos, qsizetype(sect[j].size - sizeof(QPluginMetaData::MagicString)) }; } } |