mirror of
https://github.com/searxng/searxng.git
synced 2026-08-29 18:41:31 +00:00
[fix] preferences: cap zlib decompress
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user