diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 4c30d2dbb..4a0812ba1 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -38,6 +38,7 @@ Fixed - Fixed hints sometimes not working with Qt 5.8 - `:enter-mode` now refuses to enter modes which can't be entered manually (which caused crashes). - `:record-macro` (`q`) now doesn't try to record macros for special keys without a text. +- Fixed PAC (proxy autoconfig) not working with QtWebKit v0.9.1 ------ diff --git a/README.asciidoc b/README.asciidoc index 10f5a740b..0fa8dc9b0 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -187,6 +187,7 @@ Contributors, sorted by the number of commits in descending order: * Oliver Caldwell * Julian Weigt * Sebastian Frysztak +* Nikolay Amiantov * Jonas Schürmann * error800 * Michael Hoang @@ -197,7 +198,6 @@ Contributors, sorted by the number of commits in descending order: * Tomasz Kramkowski * Samuel Walladge * Peter Rice -* Nikolay Amiantov * Ismail S * Halfwit * David Vogt diff --git a/qutebrowser/browser/network/pac.py b/qutebrowser/browser/network/pac.py index dfa4d42d6..91f15dfaf 100644 --- a/qutebrowser/browser/network/pac.py +++ b/qutebrowser/browser/network/pac.py @@ -126,7 +126,7 @@ class _PACContext(QObject): return QHostAddress(QHostAddress.LocalHost).toString() -class PACResolver(object): +class PACResolver: """Evaluate PAC script files and resolve proxies.""" diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index e70cc41fa..1199c73f4 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -614,7 +614,7 @@ def proxy_from_url(url): scheme = url.scheme() if scheme in ['pac+http', 'pac+https']: - return pac.PACFetcher + return pac.PACFetcher(url) types = { 'http': QNetworkProxy.HttpProxy, diff --git a/tests/unit/browser/webkit/network/test_pac.py b/tests/unit/browser/webkit/network/test_pac.py index ebb081aff..c5c12b1a1 100644 --- a/tests/unit/browser/webkit/network/test_pac.py +++ b/tests/unit/browser/webkit/network/test_pac.py @@ -125,6 +125,43 @@ def test_invalid_port(): res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) +@pytest.mark.parametrize(string, ["", "{"]) +def test_wrong_pac_string(string): + with pytest.raises(pac.EvalProxyError): + pac.PACResolver(string) + + +@pytest.mark.parametrize("value", [ + "", + "DIRECT FOO", + "PROXY", + "SOCKS", + "FOOBAR", +]) +def test_fail_parse(value): + test_str_f = """ + function FindProxyForURL(domain, host) {{ + return "{}"; + }} + """ + + res = pac.PACResolver(test_str_f.format(value)) + with pytest.raises(pac.ParseProxyError): + res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) + + +def test_fail_return(): + test_str = """ + function FindProxyForURL(domain, host) { + return null; + } + """ + + res = pac.PACResolver(test_str) + with pytest.raises(pac.EvalProxyError): + res.resolve(QNetworkProxyQuery(QUrl("https://example.com/test"))) + + # See https://github.com/The-Compiler/qutebrowser/pull/1891#issuecomment-259222615 try: diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index 49bc85f07..0db43a0e6 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -765,7 +765,7 @@ class TestProxyFromUrl: @pytest.mark.parametrize('scheme', ['pac+http', 'pac+https']) def test_proxy_from_url_pac(self, scheme): fetcher = urlutils.proxy_from_url(QUrl('{}://foo'.format(scheme))) - assert fetcher is pac.PACFetcher + assert isinstance(fetcher, pac.PACFetcher) @pytest.mark.parametrize('url, exception', [ ('blah', urlutils.InvalidProxyTypeError),