summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvojkovic <git@vojk.au>2026-08-20 14:54:12 +0000
committerBrock Vojkovic <brock@vojk.au>2026-08-21 20:55:33 +0800
commit5f4005996e387985353e9300fd171e0b0045dd1a (patch)
tree35121907cdd10192bc82f99cac09dcc69f321606
parent487d7a96e0f1b74c65c4e22e366dce12a96e5ac2 (diff)
[fix] preferences: cap zlib decompress
-rw-r--r--searx/preferences.py4
-rwxr-xr-xsearx/webapp.py14
2 files changed, 9 insertions, 9 deletions
diff --git a/searx/preferences.py b/searx/preferences.py
index edc80f8bd..34066cb71 100644
--- a/searx/preferences.py
+++ b/searx/preferences.py
@@ -6,7 +6,7 @@
import typing as t
from base64 import urlsafe_b64encode, urlsafe_b64decode
-from zlib import compress, decompress
+from zlib import compress, decompressobj
from urllib.parse import parse_qs, urlencode
from collections import OrderedDict
from collections.abc import Iterable
@@ -517,7 +517,7 @@ class Preferences:
def parse_encoded_data(self, input_data: str):
"""parse (base64) preferences from request (``flask.request.form['preferences']``)"""
- bin_data = decompress(urlsafe_b64decode(input_data))
+ bin_data = decompressobj().decompress(urlsafe_b64decode(input_data), 16 * 1024)
dict_data = {}
for x, y in parse_qs(bin_data.decode('ascii'), keep_blank_values=True).items():
dict_data[x] = y[0]
diff --git a/searx/webapp.py b/searx/webapp.py
index 3be042ba5..b59bcdc7e 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -484,14 +484,14 @@ def pre_request():
if k not in sxng_request.form:
sxng_request.form[k] = v
- if sxng_request.form.get('preferences'):
- preferences.parse_encoded_data(sxng_request.form['preferences'])
- else:
- try:
+ try:
+ if sxng_request.form.get('preferences'):
+ preferences.parse_encoded_data(sxng_request.form['preferences'])
+ else:
preferences.parse_dict(sxng_request.form)
- except Exception as e: # pylint: disable=broad-except
- logger.exception(e, exc_info=True)
- sxng_request.errors.append(gettext('Invalid settings'))
+ except Exception as e: # pylint: disable=broad-except
+ logger.exception(e, exc_info=True)
+ sxng_request.errors.append(gettext('Invalid settings'))
# language is defined neither in settings nor in preferences
# use browser headers