commit:     7096ccdac9c9e8d38b8b5f644258a44b5227f798
Author:     Michael Mair-Keimberger <m.mairkeimberger <AT> gmail <DOT> com>
AuthorDate: Tue Sep 11 19:25:54 2018 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Wed Sep 12 05:34:11 2018 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=7096ccda

kde-frameworks/ktexteditor: remove unused patch(es)

Closes: https://github.com/gentoo/kde/pull/868

 .../files/ktexteditor-5.46.0-CVE-2018-10361.patch  | 187 ---------------------
 1 file changed, 187 deletions(-)

diff --git 
a/kde-frameworks/ktexteditor/files/ktexteditor-5.46.0-CVE-2018-10361.patch 
b/kde-frameworks/ktexteditor/files/ktexteditor-5.46.0-CVE-2018-10361.patch
deleted file mode 100644
index d3b9b5d480..0000000000
--- a/kde-frameworks/ktexteditor/files/ktexteditor-5.46.0-CVE-2018-10361.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-From c81af5aa1d4f6e0f8c44b2e85ca007ba2a1e4590 Mon Sep 17 00:00:00 2001
-From: Christoph Cullmann <cullm...@kde.org>
-Date: Thu, 7 Jun 2018 16:12:25 +0200
-Subject: CVE-2018-10361: privilege escalation
-
-improve handling of temporary file to avoid possible race-condition
-
-Differential Revision: https://phabricator.kde.org/D12513
----
- src/buffer/katesecuretextbuffer.cpp | 99 +++++++++++++++++--------------------
- src/buffer/katesecuretextbuffer_p.h |  4 --
- 2 files changed, 46 insertions(+), 57 deletions(-)
-
-diff --git a/src/buffer/katesecuretextbuffer.cpp 
b/src/buffer/katesecuretextbuffer.cpp
-index 0647bee..c014608 100644
---- a/src/buffer/katesecuretextbuffer.cpp
-+++ b/src/buffer/katesecuretextbuffer.cpp
-@@ -53,39 +53,37 @@ ActionReply SecureTextBuffer::savefile(const QVariantMap 
&args)
- bool SecureTextBuffer::saveFileInternal(const QString &sourceFile, const 
QString &targetFile,
-                                         const QByteArray &checksum, const 
uint ownerId, const uint groupId)
- {
--    QFileInfo targetFileInfo(targetFile);
--    if (!QDir::setCurrent(targetFileInfo.dir().path())) {
-+    /**
-+     * open source file for reading
-+     * if not possible, signal error
-+     */
-+    QFile readFile(sourceFile);
-+    if (!readFile.open(QIODevice::ReadOnly)) {
-         return false;
-     }
- 
--    // get information about target file
--    const QString targetFileName = targetFileInfo.fileName();
--    targetFileInfo.setFile(targetFileName);
--    const bool newFile = !targetFileInfo.exists();
--
--    // open source and target file
--    QFile readFile(sourceFile);
--    //TODO use QSaveFile for saving contents and automatic atomic move on 
commit() when QSaveFile's security problem
--    // (default temporary file permissions) is fixed
--    //
--    // We will first generate temporary filename and then use it relatively 
to prevent an attacker
--    // to trick us to write contents to a different file by changing 
underlying directory.
--    QTemporaryFile tempFile(targetFileName);
-+    /**
-+     * construct file info for target file
-+     * we need to know things like path/exists/permissions
-+     */
-+    const QFileInfo targetFileInfo(targetFile);
-+
-+    /**
-+     * create temporary file in current directory to be able to later do an 
atomic rename
-+     * we need to pass full path, else QTemporaryFile uses the temporary 
directory
-+     * if not possible, signal error, this catches e.g. a non-existing target 
directory, too
-+     */
-+    QTemporaryFile tempFile(targetFileInfo.absolutePath() + 
QStringLiteral("/secureXXXXXX"));
-     if (!tempFile.open()) {
-         return false;
-     }
--    tempFile.close();
--    QString tempFileName = QFileInfo(tempFile).fileName();
--    tempFile.setFileName(tempFileName);
--    if (!readFile.open(QIODevice::ReadOnly) || !tempFile.open()) {
--        return false;
--    }
--    const int tempFileDescriptor = tempFile.handle();
- 
--    // prepare checksum maker
-+    /**
-+     * copy contents + do checksumming
-+     * if not possible, signal error
-+     */
-     QCryptographicHash cryptographicHash(checksumAlgorithm);
--
--    // copy contents
-+    const qint64 bufferLength = 4096;
-     char buffer[bufferLength];
-     qint64 read = -1;
-     while ((read = readFile.read(buffer, bufferLength)) > 0) {
-@@ -95,30 +93,43 @@ bool SecureTextBuffer::saveFileInternal(const QString 
&sourceFile, const QString
-         }
-     }
- 
--    // check that copying was successful and checksum matched
--    QByteArray localChecksum = cryptographicHash.result();
--    if (read == -1 || localChecksum != checksum || !tempFile.flush()) {
-+    /**
-+     * check that copying was successful and checksum matched
-+     * we need to flush the file, as QTemporaryFile keeps the handle open
-+     * and we later do things like renaming of the file!
-+     * if not possible, signal error
-+     */
-+    if ((read == -1) || (cryptographicHash.result() != checksum) || 
!tempFile.flush()) {
-         return false;
-     }
- 
--    tempFile.close();
--
--    if (newFile) {
-+    /**
-+     * try to preserve the permissions
-+     */
-+    if (!targetFileInfo.exists()) {
-         // ensure new file is readable by anyone
-         tempFile.setPermissions(tempFile.permissions() | 
QFile::Permission::ReadGroup | QFile::Permission::ReadOther);
-     } else {
-         // ensure the same file permissions
-         tempFile.setPermissions(targetFileInfo.permissions());
-+
-         // ensure file has the same owner and group as before
--        setOwner(tempFileDescriptor, ownerId, groupId);
-+        setOwner(tempFile.handle(), ownerId, groupId);
-     }
- 
--    // rename temporary file to the target file
--    if (moveFile(tempFileName, targetFileName)) {
-+    /**
-+     * try to (atomic) rename temporary file to the target file
-+     */
-+    if (moveFile(tempFile.fileName(), targetFileInfo.filePath())) {
-         // temporary file was renamed, there is nothing to remove anymore
-         tempFile.setAutoRemove(false);
-         return true;
-     }
-+
-+    /**
-+     * we failed
-+     * QTemporaryFile will handle cleanup
-+     */
-     return false;
- }
- 
-@@ -141,28 +152,10 @@ bool SecureTextBuffer::moveFile(const QString 
&sourceFile, const QString &target
- {
- #if !defined(Q_OS_WIN) && !defined(Q_OS_ANDROID)
-     const int result = std::rename(QFile::encodeName(sourceFile).constData(), 
QFile::encodeName(targetFile).constData());
--    if (result == 0) {
--        syncToDisk(QFile(targetFile).handle());
--        return true;
--    }
--    return false;
-+    return (result == 0);
- #else
-     // use racy fallback for windows
-     QFile::remove(targetFile);
-     return QFile::rename(sourceFile, targetFile);
- #endif
- }
--
--void SecureTextBuffer::syncToDisk(const int fd)
--{
--#ifndef Q_OS_WIN
--#if HAVE_FDATASYNC
--    fdatasync(fd);
--#else
--    fsync(fd);
--#endif
--#else
--    // no-op for windows
--#endif
--}
--
-diff --git a/src/buffer/katesecuretextbuffer_p.h 
b/src/buffer/katesecuretextbuffer_p.h
-index a38285b..e00721c 100644
---- a/src/buffer/katesecuretextbuffer_p.h
-+++ b/src/buffer/katesecuretextbuffer_p.h
-@@ -56,8 +56,6 @@ public:
-     static const QCryptographicHash::Algorithm checksumAlgorithm = 
QCryptographicHash::Algorithm::Sha512;
- 
- private:
--    static const qint64 bufferLength = 4096;
--
-     /**
-      * Saves file contents using sets permissions.
-      */
-@@ -66,8 +64,6 @@ private:
- 
-     static bool moveFile(const QString &sourceFile, const QString 
&targetFile);
- 
--    static void syncToDisk(const int fd);
--
- public Q_SLOTS:
-     /**
-      * KAuth action to perform both prepare or move work based on given 
parameters.
--- 
-cgit v0.11.2

Reply via email to