diff --git a/src/kpackage/package.cpp b/src/kpackage/package.cpp --- a/src/kpackage/package.cpp +++ b/src/kpackage/package.cpp @@ -385,14 +385,16 @@ if (fi.exists()) { if (d->externalPaths) { //qCDebug(KPACKAGE_LOG) << "found" << file; + file = d->fileSelector->select(file); d->discoveries.insert(discoveryKey, file); return file; } // ensure that we don't return files outside of our base path // due to symlink or ../ games if (d->isInsidePackageDir(fi.canonicalFilePath())) { //qCDebug(KPACKAGE_LOG) << "found" << file; + file = d->fileSelector->select(file); d->discoveries.insert(discoveryKey, file); return file; } @@ -871,6 +873,7 @@ PackagePrivate::PackagePrivate() : QSharedData(), fallbackPackage(nullptr), + fileSelector(new QFileSelector), metadata(nullptr), externalPaths(false), valid(false), @@ -880,7 +883,8 @@ } PackagePrivate::PackagePrivate(const PackagePrivate &other) - : QSharedData() + : QSharedData(), + fileSelector(new QFileSelector) { *this = other; metadata = nullptr; @@ -901,6 +905,7 @@ } delete metadata; delete fallbackPackage; + delete fileSelector; } PackagePrivate &PackagePrivate::operator=(const PackagePrivate &rhs) diff --git a/src/kpackage/private/package_p.h b/src/kpackage/private/package_p.h --- a/src/kpackage/private/package_p.h +++ b/src/kpackage/private/package_p.h @@ -27,6 +27,8 @@ #include #include #include +#include + namespace KPackage { @@ -91,6 +93,7 @@ bool isInsidePackageDir(const QString& canonicalPath) const; QPointer structure; + QFileSelector *fileSelector; QString path; QString tempRoot; QStringList contentsPrefixPaths;