summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2018-07-03 17:14:34 +0200
committerFlorian Bruhin <git@the-compiler.org>2018-07-10 15:29:17 +0200
commit5c299278c2a7348af25725ca3e6d73f9df5f5e03 (patch)
tree89e65d6d1194a26bf41a364e3ffefa89921c6ac6
parent0f037fb415581283074dff8b2d090cefcd337602 (diff)
downloadqutebrowser-5c299278c2a7348af25725ca3e6d73f9df5f5e03.tar.gz
qutebrowser-5c299278c2a7348af25725ca3e6d73f9df5f5e03.zip
Handle download errors when the reply is already gone
Fixes #1270 (cherry picked from commit 0a31e19eda91fbb4d5e6a333591cd0b028e7c25a)
-rw-r--r--doc/changelog.asciidoc8
-rw-r--r--qutebrowser/browser/qtnetworkdownloads.py11
2 files changed, 17 insertions, 2 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index f550f2ef1..28a7d89ea 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -15,6 +15,14 @@ breaking changes (such as renamed commands) can happen in minor releases.
// `Fixed` for any bug fixes.
// `Security` to invite users to upgrade in case of vulnerabilities.
+v1.5.0 (unreleased)
+-------------------
+
+Fixed
+~~~~~
+
+- Rare crash when an error occurs in downloads.
+
v1.4.0
------
diff --git a/qutebrowser/browser/qtnetworkdownloads.py b/qutebrowser/browser/qtnetworkdownloads.py
index 4e992b172..bdd2b280a 100644
--- a/qutebrowser/browser/qtnetworkdownloads.py
+++ b/qutebrowser/browser/qtnetworkdownloads.py
@@ -29,7 +29,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, QTimer
from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
from qutebrowser.config import config
-from qutebrowser.utils import message, usertypes, log, urlutils, utils
+from qutebrowser.utils import message, usertypes, log, urlutils, utils, debug
from qutebrowser.browser import downloads
from qutebrowser.browser.webkit import http
from qutebrowser.browser.webkit.network import networkmanager
@@ -307,7 +307,14 @@ class DownloadItem(downloads.AbstractDownloadItem):
"""Handle QNetworkReply errors."""
if code == QNetworkReply.OperationCanceledError:
return
- self._die(self._reply.errorString())
+
+ if self._reply is None:
+ error = "Unknown error: {}".format(
+ debug.qenum_key(QNetworkReply, code))
+ else:
+ error = self._reply.errorString()
+
+ self._die(error)
@pyqtSlot()
def _on_read_timer_timeout(self):