summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2019-02-17 16:32:09 +0100
committerFlorian Bruhin <me@the-compiler.org>2019-02-17 17:14:58 +0100
commit4c54ebf70fc10771dac39d5da79a9e94b1240297 (patch)
tree1c2c988ff408ec7054e96b33892e38ea5468d5f3
parent152abb0d64b8c3a3c0afc8427a006e24c1b284d1 (diff)
downloadqutebrowser-4c54ebf70fc10771dac39d5da79a9e94b1240297.tar.gz
qutebrowser-4c54ebf70fc10771dac39d5da79a9e94b1240297.zip
Allow unique initiator requests to qute://testdata
In tests/unit/browser/test_caret.py in the test TestFollowSelected::test_follow_selected_with_link we follow a link from qute://testdata/data/caret.html to qute://testdata/data/hello.txt. For some reason, Qt 5.12 treats that as an unique/opaque origin with Qt 5.12, causing the request to be blocked and the test to fail. To avoid this, we now allow all opaque requests to qute://testdata URLs. This isn't a problem because a qute://testdata handler is only registered inside tests anyways. See #4478
-rw-r--r--qutebrowser/browser/webengine/webenginequtescheme.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/qutebrowser/browser/webengine/webenginequtescheme.py b/qutebrowser/browser/webengine/webenginequtescheme.py
index 816589514..821fc49dc 100644
--- a/qutebrowser/browser/webengine/webenginequtescheme.py
+++ b/qutebrowser/browser/webengine/webenginequtescheme.py
@@ -62,18 +62,33 @@ class QuteSchemeHandler(QWebEngineUrlSchemeHandler):
"""
try:
initiator = job.initiator()
+ request_url = job.requestUrl()
except AttributeError:
# Added in Qt 5.11
return True
- if initiator == QUrl('null') and not qtutils.version_check('5.12'):
+ # https://codereview.qt-project.org/#/c/234849/
+ is_opaque = initiator == QUrl('null')
+ target = request_url.scheme(), request_url.host()
+
+ if is_opaque and not qtutils.version_check('5.12'):
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-70421
+ # When we don't register the qute:// scheme, all requests are
+ # flagged as opaque.
+ return True
+
+ if (target == ('qute', 'testdata') and
+ is_opaque and
+ qtutils.version_check('5.12')):
+ # Allow requests to qute://testdata, as this is needed in Qt 5.12
+ # for all tests to work properly. No qute://testdata handler is
+ # installed outside of tests.
return True
if initiator.isValid() and initiator.scheme() != 'qute':
log.misc.warning("Blocking malicious request from {} to {}".format(
initiator.toDisplayString(),
- job.requestUrl().toDisplayString()))
+ request_url.toDisplayString()))
job.fail(QWebEngineUrlRequestJob.RequestDenied)
return False