summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2017-11-26 17:31:07 +0100
committerFlorian Bruhin <git@the-compiler.org>2017-11-26 17:32:05 +0100
commitdfe74ff0ee5c661ede79d0b94b432ff9a8557807 (patch)
tree8bce934721b3d27a6f8521f6ba6ae129d3419631
parent18a45bbd5b0492785cfc6e9b541d816ed8ec5c54 (diff)
downloadqutebrowser-dfe74ff0ee5c661ede79d0b94b432ff9a8557807.tar.gz
qutebrowser-dfe74ff0ee5c661ede79d0b94b432ff9a8557807.zip
Handle empty messages in qt_message_handler
I can't reproduce this, but someone on KDE reported always getting a crash (as msg.splitlines()[0] gives an IndexError) when trying to select a file with Qt 5.9.3. (cherry picked from commit 67253726fa82471abb0ac4e2e5ae5168b2f6575c)
-rw-r--r--qutebrowser/utils/log.py3
-rw-r--r--tests/unit/utils/test_log.py22
2 files changed, 25 insertions, 0 deletions
diff --git a/qutebrowser/utils/log.py b/qutebrowser/utils/log.py
index 98f14a454..aafab4a09 100644
--- a/qutebrowser/utils/log.py
+++ b/qutebrowser/utils/log.py
@@ -421,6 +421,9 @@ def qt_message_handler(msg_type, context, msg):
'with: -9805', # flake8: disable=E131
]
+ if not msg:
+ msg = "Logged empty message!"
+
if any(msg.strip().startswith(pattern) for pattern in suppressed_msgs):
level = logging.DEBUG
else:
diff --git a/tests/unit/utils/test_log.py b/tests/unit/utils/test_log.py
index 147e760bb..30dd5d634 100644
--- a/tests/unit/utils/test_log.py
+++ b/tests/unit/utils/test_log.py
@@ -25,12 +25,15 @@ import itertools
import sys
import warnings
+import attr
import pytest
import pytest_catchlog
from qutebrowser.utils import log
from qutebrowser.misc import utilcmds
+from PyQt5 import QtCore
+
@pytest.fixture(autouse=True)
def restore_loggers():
@@ -252,3 +255,22 @@ def test_ignore_py_warnings(caplog):
assert len(caplog.records) == 1
msg = caplog.records[0].message.splitlines()[0]
assert msg.endswith("UserWarning: not hidden")
+
+
+class TestQtMessageHandler:
+
+ @attr.s
+ class Context:
+
+ """Fake QMessageLogContext."""
+
+ function = attr.ib(default=None)
+ category = attr.ib(default=None)
+ file = attr.ib(default=None)
+ line = attr.ib(default=None)
+
+ def test_empty_message(self, caplog):
+ """Make sure there's no crash with an empty message."""
+ log.qt_message_handler(QtCore.QtDebugMsg, self.Context(), "")
+ assert len(caplog.records) == 1
+ assert caplog.records[0].msg == "Logged empty message!"