summaryrefslogtreecommitdiffstats
path: root/src/corelib/plugin/qlibrary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/plugin/qlibrary.cpp')
-rw-r--r--src/corelib/plugin/qlibrary.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index f83a9483f47..1df6dfeb089 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -205,6 +205,7 @@ static QLibraryScanResult qt_find_pattern(const char *s, qsizetype s_len, QStrin
*errMsg = QLibrary::tr("'%1' is not a Qt plugin").arg(*errMsg);
return QLibraryScanResult{};
}
+ i += sizeof(QPluginMetaData::MagicString);
return { i, s_len - i };
}
@@ -686,7 +687,13 @@ static bool qt_get_metadata(QLibraryPrivate *priv, QString *errMsg)
return error(QLibrary::tr("entrypoint 'qt_plugin_query_metadata' not found"));
auto metaData = reinterpret_cast<QPluginMetaData (*)()>(pfn)();
- QJsonDocument doc = qJsonFromRawLibraryMetaData(reinterpret_cast<const char *>(metaData.data), metaData.size, errMsg);
+ auto data = reinterpret_cast<const char *>(metaData.data);
+ if (metaData.size < sizeof(QPluginMetaData::MagicHeader))
+ return error(QLibrary::tr("metadata too small"));
+
+ data += sizeof(QPluginMetaData::MagicString);
+ metaData.size -= sizeof(QPluginMetaData::MagicString);
+ QJsonDocument doc = qJsonFromRawLibraryMetaData(data, metaData.size, errMsg);
if (doc.isNull())
return false; // error message already set