Skip to content

Commit

Permalink
mail-client/trojita: Fix crash when opening attachments
Browse files Browse the repository at this point in the history
That's patch no.11 and definitely the last one.

Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <[email protected]>
  • Loading branch information
a17r committed Dec 7, 2020
1 parent 64caedf commit 720d0a5
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 0 deletions.
68 changes: 68 additions & 0 deletions mail-client/trojita/files/trojita-0.7-crash-w-attachments.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
From cf2364b80fa8ae844df8350cd5833d47cce235f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= <[email protected]>
Date: Mon, 9 Mar 2020 08:24:48 -0700
Subject: [PATCH] Fix possible crash when downloading attachments

Turns out we've been happily deleting network replies from the
QNetworkReply::finished(). That was never a good thing to do, but it did
not use to crash with older Qt. Now it does.

After changing to deleteLater(), there's a window for
already-deregistered replies to generate events, therefore the assert
has to go, too, otherwise Bad Things happen:

(gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff16bdcd2 in __GI_abort () at abort.c:89
#2 0x00007ffff2400bcb in qt_message_fatal (context=..., message=<synthetic pointer>...) at /var/tmp/portage/dev-qt/qtcore-5.13.9999/work/qtcore-5.13.9999/src/corelib/global/qlogging.cpp:1904
#3 QMessageLogger::fatal (this=this@entry=0x7fffffffc990, msg=msg@entry=0x7ffff2690b10 "ASSERT: \"%s\" in file %s, line %d") at /var/tmp/portage/dev-qt/qtcore-5.13.9999/work/qtcore-5.13.9999/src/corelib/global/qlogging.cpp:888
#4 0x00007ffff23fff7c in qt_assert (assertion=assertion@entry=0x5555558451d7 "reply", file=file@entry=0x555555841a38 "/home/jkt/work/prog/trojita/src/Imap/Network/FileDownloadManager.cpp", line=line@entry=142)
at /var/tmp/portage/dev-qt/qtcore-5.13.9999/work/qtcore-5.13.9999/src/corelib/global/qglobal.cpp:3247
#5 0x00005555555da840 in Imap::Network::FileDownloadManager::onPartDataTransfered (this=0x555556a20990)
#6 0x00007ffff25f1bdf in QtPrivate::QSlotObjectBase::call (a=0x7fffffffcaa0, r=0x555556a20990, this=0x5555569f99c0) at ../../include/QtCore/../../../qtcore-5.13.9999/src/corelib/kernel/qobjectdefs_impl.h:394
#7 QMetaObject::activate(QObject*, int, int, void**) () at /var/tmp/portage/dev-qt/qtcore-5.13.9999/work/qtcore-5.13.9999/src/corelib/kernel/qobject.cpp:3787
#8 0x00007ffff25f20b7 in QMetaObject::activate (sender=sender@entry=0x555556a21370, m=m@entry=0x7ffff3f96b00 <QNetworkReply::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x0)
at /var/tmp/portage/dev-qt/qtcore-5.13.9999/work/qtcore-5.13.9999/src/corelib/kernel/qobject.cpp:3658
#9 0x00007ffff3d3cbf3 in QNetworkReply::finished (this=this@entry=0x555556a21370) at .moc/moc_qnetworkreply.cpp:385
#10 0x0000555555709485 in Imap::Network::MsgPartNetworkReply::slotMyDataChanged() () at /home/jkt/work/prog/trojita/src/Imap/Network/MsgPartNetworkReply.cpp:112

BUG: 417697
Reported-by: Stefan de Konink <[email protected]>
Change-Id: I79f340c5a471430a14474472513d0a055c7238d6
---
src/Imap/Network/FileDownloadManager.cpp | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/Imap/Network/FileDownloadManager.cpp b/src/Imap/Network/FileDownloadManager.cpp
index 16b6c8df..c3f72176 100644
--- a/src/Imap/Network/FileDownloadManager.cpp
+++ b/src/Imap/Network/FileDownloadManager.cpp
@@ -139,7 +139,9 @@ void FileDownloadManager::downloadMessage()

void FileDownloadManager::onPartDataTransfered()
{
- Q_ASSERT(reply);
+ if (!reply) {
+ return;
+ }
if (reply->error() == QNetworkReply::NoError) {
if (!saving.open(QIODevice::WriteOnly)) {
emit transferError(saving.errorString());
@@ -192,11 +194,11 @@ void FileDownloadManager::onCombinerTransferError(const QString &message)

void FileDownloadManager::deleteReply(QNetworkReply *reply)
{
- if (reply == this->reply) {
+ if (reply && reply == this->reply) {
if (!saved)
onPartDataTransfered();
- delete reply;
- this->reply = 0;
+ reply->deleteLater();
+ this->reply = nullptr;
}
}

--
GitLab

90 changes: 90 additions & 0 deletions mail-client/trojita/trojita-0.7-r6.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="https://anongit.kde.org/${PN}.git"
inherit git-r3
else
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.xz"
KEYWORDS="amd64 x86"
fi
inherit cmake virtualx xdg

DESCRIPTION="A Qt IMAP e-mail client"
HOMEPAGE="http://trojita.flaska.net/"

LICENSE="|| ( GPL-2 GPL-3 )"
SLOT="0"
IUSE="+crypt +dbus debug +password test +zlib"

REQUIRED_USE="password? ( dbus )"
RESTRICT="!test? ( test )"

BDEPEND="
dev-qt/linguist-tools:5
zlib? ( virtual/pkgconfig )
"
RDEPEND="
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtnetwork:5[ssl]
dev-qt/qtsql:5[sqlite]
dev-qt/qtsvg:5
dev-qt/qtwebkit:5
dev-qt/qtwidgets:5
crypt? (
>=app-crypt/gpgme-1.8.0[cxx,qt5]
dev-libs/mimetic
)
dbus? ( dev-qt/qtdbus:5 )
password? ( dev-libs/qtkeychain[qt5(+)] )
zlib? ( sys-libs/zlib )
"
DEPEND="${RDEPEND}
test? ( dev-qt/qttest:5 )
"

DOCS=( README LICENSE )

PATCHES=(
"${FILESDIR}/${P}-gpgme.patch"
"${FILESDIR}/${P}-gpg-tests.patch"
"${FILESDIR}/${P}-qt-5.11b3.patch"
"${FILESDIR}/${P}-qt-5.13.patch" # bug 730058
"${FILESDIR}/${P}-qt-5.15.patch"
"${FILESDIR}/${P}-CVE-2019-10734.patch" # KDE-bug 404697
"${FILESDIR}/${P}-CVE-2020-15047.patch" # bug 729596
"${FILESDIR}/${P}-cmake-cxx11.patch"
"${FILESDIR}/${P}-desktop-spec-namespace.patch"
"${FILESDIR}/${P}-metainfo.patch" # bug 730140
"${FILESDIR}/${P}-crash-w-attachments.patch" # KDE-Bug 417697
)

src_prepare() {
cmake_src_prepare

# the build system is taking a look at `git describe ... --dirty` and
# gentoo's modifications to CMakeLists.txt break these
sed -e "s/--dirty//" -i cmake/TrojitaVersion.cmake || die "Cannot fix the version check"
}

src_configure() {
local mycmakeargs=(
-DWITH_RAGEL=OFF # bug 739866, broken by ragel-7
-DWITH_CRYPTO_MESSAGES=$(usex crypt)
-DWITH_GPGMEPP=$(usex crypt)
-DWITH_MIMETIC=$(usex crypt)
-DWITH_DBUS=$(usex dbus)
-DWITH_QTKEYCHAIN_PLUGIN=$(usex password)
-DWITH_TESTS=$(usex test)
-DWITH_ZLIB=$(usex zlib)
)

cmake_src_configure
}

src_test() {
virtx cmake_src_test
}

0 comments on commit 720d0a5

Please sign in to comment.