diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h index f184b514e6b1f4f26a0f9d057aa805c79bc7725b..9665beabc000a0139f260531f84262036fcbf886 100644 --- a/src/windeployqt/utils.h +++ b/src/windeployqt/utils.h @@ -337,13 +337,23 @@ bool updateFile(const QString &sourceFileName, QFile file(sourceFileName); if (optVerboseLevel) std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n"; - if (!(flags & SkipUpdateFile) && !file.copy(targetFileName)) { - *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3") + if (!(flags & SkipUpdateFile)) { + if (!file.copy(targetFileName)) { + *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3") .arg(QDir::toNativeSeparators(sourceFileName), QDir::toNativeSeparators(targetFileName), file.errorString()); - return false; - } + return false; + } + if (!(file.permissions() & QFile::WriteUser)) { // QTBUG-40152, clear inherited read-only attribute + QFile targetFile(targetFileName); + if (!targetFile.setPermissions(targetFile.permissions() | QFile::WriteUser)) { + *errorMessage = QString::fromLatin1("Cannot set write permission on %1: %2") + .arg(QDir::toNativeSeparators(targetFileName), file.errorString()); + return false; + } + } // Check permissions + } // !SkipUpdateFile if (json) json->addFile(sourceFileName, targetDirectory); return true;