From 203b6c354f87b501be78f9c5230ed030b910ae09 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 21 Nov 2017 14:07:49 +0100 Subject: [PATCH] Fix content.cache.size overflow with QtWebEngine While 64-bit values are allowed with QtWebKit/QNetworkDiskCache, QtWebEngine only allows 32-bit values here. With the updated sip's strict overflow checking, that means we get an exception when setting a too big value. --- doc/help/settings.asciidoc | 1 + qutebrowser/browser/webengine/webenginesettings.py | 11 +++++++++-- qutebrowser/config/configdata.yml | 6 ++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index ace727686..8ffc2407c 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -1455,6 +1455,7 @@ This setting is only available with the QtWebKit backend. [[content.cache.size]] === content.cache.size Size (in bytes) of the HTTP network cache. Null to use the default value. +With QtWebEngine, the maximum supported value is 2147483647 (~2 GB). Type: <> diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 50aa4bb18..4bf525c46 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -94,9 +94,10 @@ class DefaultProfileSetter(websettings.Base): """A setting set on the QWebEngineProfile.""" - def __init__(self, setter, default=websettings.UNSET): + def __init__(self, setter, converter=None, default=websettings.UNSET): super().__init__(default) self._setter = setter + self._converter = converter def __repr__(self): return utils.get_repr(self, setter=self._setter, constructor=True) @@ -105,7 +106,11 @@ class DefaultProfileSetter(websettings.Base): if settings is not None: raise ValueError("'settings' may not be set with " "DefaultProfileSetters!") + setter = getattr(default_profile, self._setter) + if self._converter is not None: + value = self._converter(value) + setter(value) @@ -296,7 +301,9 @@ MAPPINGS = { Attribute(QWebEngineSettings.LocalStorageEnabled), 'content.cache.size': # 0: automatically managed by QtWebEngine - DefaultProfileSetter('setHttpCacheMaximumSize', default=0), + DefaultProfileSetter('setHttpCacheMaximumSize', default=0, + converter=lambda val: + qtutils.check_overflow(val, 'int', fatal=False)), 'content.xss_auditing': Attribute(QWebEngineSettings.XSSAuditingEnabled), 'content.default_encoding': diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index c2d5e21bb..5ed18c33f 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -195,8 +195,10 @@ content.cache.size: none_ok: true minval: 0 maxval: maxint64 - desc: Size (in bytes) of the HTTP network cache. Null to use the default - value. + desc: >- + Size (in bytes) of the HTTP network cache. Null to use the default value. + + With QtWebEngine, the maximum supported value is 2147483647 (~2 GB). # Defaults from QWebSettings::QWebSettings() in # qtwebkit/Source/WebKit/qt/Api/qwebsettings.cpp