[fix] preferences: cap zlib decompress

This commit is contained in:
vojkovic
2026-08-20 14:54:12 +00:00
committed by Brock Vojkovic
parent 487d7a96e0
commit 5f4005996e
2 changed files with 9 additions and 9 deletions

View File

@@ -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]

View File

@@ -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