summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2018-09-30 22:55:17 +0200
committerFlorian Bruhin <me@the-compiler.org>2018-09-30 22:55:17 +0200
commita3ae9507075b6f5fe4e58b3469e552509b643310 (patch)
tree2577ffe1f1f1795e462f6bcbd066a4463a8a66a5
parentdd41bc2f7b605156c30173c06b979a4b9db57399 (diff)
downloadqutebrowser-a3ae9507075b6f5fe4e58b3469e552509b643310.tar.gz
qutebrowser-a3ae9507075b6f5fe4e58b3469e552509b643310.zip
Ignore click events with invalid positions
Since Qt 5.11.2, various crash logs like this popped up after clicking a <select> element: Traceback (most recent call last): File ".../browser/mouse.py", line 239, in eventFilter return self._handlers[evtype](event) File ".../browser/mouse.py", line 121, in _handle_mouse_press self._mousepress_insertmode_cb) File ".../browser/webengine/webenginetab.py", line 624, in find_at_pos assert pos.x() >= 0 AssertionError This is probably caused by https://codereview.qt-project.org/#/c/193908/ in some way...
-rw-r--r--doc/changelog.asciidoc1
-rw-r--r--qutebrowser/browser/mouse.py8
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py4
3 files changed, 9 insertions, 4 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index 037da5ee5..66c20f0ad 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -96,6 +96,7 @@ Fixed
- Crash when doing initial run on Wayland without XWayland
- Crash when trying to load an empty session file.
- `:hint` with an invalid `--mode=` value now shows a proper error.
+- Rare crash on Qt 5.11.2 when clicking on `<select>` elements.
Removed
~~~~~~~
diff --git a/qutebrowser/browser/mouse.py b/qutebrowser/browser/mouse.py
index 4667471fc..7c405a57e 100644
--- a/qutebrowser/browser/mouse.py
+++ b/qutebrowser/browser/mouse.py
@@ -116,9 +116,13 @@ class MouseEventFilter(QObject):
self._ignore_wheel_event = True
+ pos = e.pos()
+ if pos.x() < 0 or pos.y() < 0:
+ log.mouse.warning("Ignoring invalid click at {}".format(pos))
+ return False
+
if e.button() != Qt.NoButton:
- self._tab.elements.find_at_pos(e.pos(),
- self._mousepress_insertmode_cb)
+ self._tab.elements.find_at_pos(pos, self._mousepress_insertmode_cb)
return False
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index 3b72719e7..b00587bf6 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -631,8 +631,8 @@ class WebEngineElements(browsertab.AbstractElements):
self._tab.run_js_async(js_code, js_cb)
def find_at_pos(self, pos, callback):
- assert pos.x() >= 0
- assert pos.y() >= 0
+ assert pos.x() >= 0, pos
+ assert pos.y() >= 0, pos
pos /= self._tab.zoom.factor()
js_code = javascript.assemble('webelem', 'find_at_pos',
pos.x(), pos.y())