Replaces eval with json.loads for safer dict parsing

Switches from eval to json.loads when parsing string representations
of dictionaries to  prevent arbitrary code
execution.
This commit is contained in:
Itz-Agasta
2026-01-20 21:54:08 +05:30
parent fe773c12b2
commit 9fa980bca2
2 changed files with 3 additions and 2 deletions

View File

@@ -58,7 +58,7 @@ COMPARISON_FUNCS = {
None: lambda val, exp: str(val) == exp, None: lambda val, exp: str(val) == exp,
'i': lambda val, exp: str(val).lower() == exp.lower(), 'i': lambda val, exp: str(val).lower() == exp.lower(),
'fm': lambda val, exp: re.fullmatch(exp, val) is not None, 'fm': lambda val, exp: re.fullmatch(exp, val) is not None,
'dict': lambda val, exp: val is None if exp == '-' else (val == eval('{' + exp + '}')), 'dict': lambda val, exp: val is None if exp == '-' else (val == json.loads('{' + exp + '}')),
'in_box': within_box 'in_box': within_box
} }

View File

@@ -7,6 +7,7 @@
""" """
Helper classes for filling the place table. Helper classes for filling the place table.
""" """
import json
import random import random
import string import string
@@ -51,7 +52,7 @@ class PlaceColumn:
elif key.startswith('addr+'): elif key.startswith('addr+'):
self._add_hstore('address', key[5:], value) self._add_hstore('address', key[5:], value)
elif key in ('name', 'address', 'extratags'): elif key in ('name', 'address', 'extratags'):
self.columns[key] = eval('{' + value + '}') self.columns[key] = json.loads('{' + value + '}')
else: else:
assert key in ('class', 'type'), "Unknown column '{}'.".format(key) assert key in ('class', 'type'), "Unknown column '{}'.".format(key)
self.columns[key] = None if value == '' else value self.columns[key] = None if value == '' else value