fix(integrity): exclude installer-managed metadata
This commit is contained in:
@@ -11,7 +11,21 @@ inline bool isRuntimeProtectedPath(const QString& path,
|
|||||||
{
|
{
|
||||||
const QString normalizedPath =
|
const QString normalizedPath =
|
||||||
QDir::cleanPath(QDir::fromNativeSeparators(path)).toCaseFolded();
|
QDir::cleanPath(QDir::fromNativeSeparators(path)).toCaseFolded();
|
||||||
static const QSet<QString> protectedPaths{
|
static const QSet<QString> installerManagedRootFiles{
|
||||||
|
QStringLiteral("components.xml"),
|
||||||
|
QStringLiteral("installationlog.txt"),
|
||||||
|
QStringLiteral("installer.dat"),
|
||||||
|
QStringLiteral("maintenancetool.dat"),
|
||||||
|
QStringLiteral("maintenancetool.exe"),
|
||||||
|
QStringLiteral("maintenancetool.ini"),
|
||||||
|
QStringLiteral("network.xml")
|
||||||
|
};
|
||||||
|
if (installerManagedRootFiles.contains(normalizedPath)
|
||||||
|
|| normalizedPath.startsWith(QStringLiteral("installerresources/"))
|
||||||
|
|| normalizedPath.startsWith(QStringLiteral("licenses/")))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
static const QSet<QString> runtimeProtectedPaths{
|
||||||
QStringLiteral("bootstrap.exe"),
|
QStringLiteral("bootstrap.exe"),
|
||||||
QStringLiteral("client.ini"),
|
QStringLiteral("client.ini"),
|
||||||
QStringLiteral("config/app_config.json"),
|
QStringLiteral("config/app_config.json"),
|
||||||
@@ -19,7 +33,7 @@ inline bool isRuntimeProtectedPath(const QString& path,
|
|||||||
QStringLiteral("config/client_identity.dat"),
|
QStringLiteral("config/client_identity.dat"),
|
||||||
QStringLiteral("config/version_policy.dat")
|
QStringLiteral("config/version_policy.dat")
|
||||||
};
|
};
|
||||||
if (protectedPaths.contains(normalizedPath))
|
if (runtimeProtectedPaths.contains(normalizedPath))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
QString runtimePrefix = QDir::cleanPath(
|
QString runtimePrefix = QDir::cleanPath(
|
||||||
@@ -29,7 +43,7 @@ inline bool isRuntimeProtectedPath(const QString& path,
|
|||||||
while (runtimePrefix.startsWith(QStringLiteral("./")))
|
while (runtimePrefix.startsWith(QStringLiteral("./")))
|
||||||
runtimePrefix.remove(0, 2);
|
runtimePrefix.remove(0, 2);
|
||||||
|
|
||||||
for (const QString& protectedPath : protectedPaths) {
|
for (const QString& protectedPath : runtimeProtectedPaths) {
|
||||||
if (normalizedPath == runtimePrefix + QLatin1Char('/') + protectedPath)
|
if (normalizedPath == runtimePrefix + QLatin1Char('/') + protectedPath)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -430,22 +430,13 @@ QStringList UpdaterLogic::obsoleteFilesComparedTo(const QJsonObject& oldManifest
|
|||||||
}
|
}
|
||||||
|
|
||||||
QSet<QString> protectedPaths{
|
QSet<QString> protectedPaths{
|
||||||
QStringLiteral("bootstrap.exe"),
|
|
||||||
QStringLiteral("launcher.exe"),
|
QStringLiteral("launcher.exe"),
|
||||||
QStringLiteral("updater.exe"),
|
QStringLiteral("updater.exe")
|
||||||
QStringLiteral("client.ini"),
|
|
||||||
QStringLiteral("config/app_config.json"),
|
|
||||||
QStringLiteral("config/local_state.json"),
|
|
||||||
QStringLiteral("config/client_identity.dat"),
|
|
||||||
QStringLiteral("config/version_policy.dat")
|
|
||||||
};
|
};
|
||||||
const QString runtimePrefix = ConfigHelper::instance().runtimeRelativePath().toCaseFolded();
|
const QString runtimePrefix = ConfigHelper::instance().runtimeRelativePath().toCaseFolded();
|
||||||
if (!runtimePrefix.isEmpty()) {
|
if (!runtimePrefix.isEmpty()) {
|
||||||
const QStringList runtimeProtected{
|
const QStringList runtimeProtected{
|
||||||
QStringLiteral("bootstrap.exe"), QStringLiteral("launcher.exe"), QStringLiteral("updater.exe"),
|
QStringLiteral("launcher.exe"), QStringLiteral("updater.exe")
|
||||||
QStringLiteral("client.ini"), QStringLiteral("config/app_config.json"),
|
|
||||||
QStringLiteral("config/local_state.json"), QStringLiteral("config/client_identity.dat"),
|
|
||||||
QStringLiteral("config/version_policy.dat")
|
|
||||||
};
|
};
|
||||||
for (const QString& path : runtimeProtected)
|
for (const QString& path : runtimeProtected)
|
||||||
protectedPaths.insert(runtimePrefix + "/" + path);
|
protectedPaths.insert(runtimePrefix + "/" + path);
|
||||||
@@ -456,6 +447,7 @@ QStringList UpdaterLogic::obsoleteFilesComparedTo(const QJsonObject& oldManifest
|
|||||||
const QString path = QDir::fromNativeSeparators(value.toObject().value("path").toString());
|
const QString path = QDir::fromNativeSeparators(value.toObject().value("path").toString());
|
||||||
const QString folded = path.toCaseFolded();
|
const QString folded = path.toCaseFolded();
|
||||||
if (!isSafeRelativePath(path) || protectedPaths.contains(folded)
|
if (!isSafeRelativePath(path) || protectedPaths.contains(folded)
|
||||||
|
|| isRuntimeProtectedPath(path)
|
||||||
|| newPaths.contains(folded) || seen.contains(folded))
|
|| newPaths.contains(folded) || seen.contains(folded))
|
||||||
continue;
|
continue;
|
||||||
seen.insert(folded);
|
seen.insert(folded);
|
||||||
|
|||||||
Reference in New Issue
Block a user