- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
def in_params(json, value, par_name, par_type, key=None):
"""
@param: par_type in [int, float, str, bool]
@return: is parameter in json
"""
if isinstance(json, dict):
return any(in_params(v, value, par_name, par_type, key=k) for k, v in json.iteritems())
if isinstance(json, list):
return any(in_params(e, value, par_name, par_type, key=None) for e in json)
# it's time to check value
if par_name and par_name != key:
return False
try:
if par_type == 'str':
return json.lower() == value.lower()
# type cast
return eval("""%s(%s) == %s(%s)""" % (par_type, json, par_type, value))
except:
return False
1) неизвестен ее тип
2) автор не боится в эвал ее передавать, если это строка
........
сорь, ступил на счет 2
Бля, это эпично.
Что такое par_name?
в некоторых json'ах значения - 0, в некоторых '0' или 0.0. Хочется найти все нули
Запомни, eval не нужен. Помимо потенциальной уязвимости, он может выдать что угодно.
Алсо, хорошо прописывать не только назначение, но и типы переменных.
Ну и вообще код укуренный, если приебываться.
не пойдет. тип может быть bool
>тип может быть bool
facepalm.jphg
Короче пиздец.
И какую бы не решает, решает он её через жопу.
юскейс, например, такой - найти все документы, у которых по ключу 'BlahBlahEnabled' лежит труъ (хотя там может быть например 1 или 1.0 или True)
Вообще я немного наврал - схема у документов есть и хранится она тоже в монге. Но меняться она может хоть каждую минуту. Как только это понадобится разрабам игры.
И можно было бы один раз по схеме найти путь до параметра(также выполнить рекурсивный обход) и брать значения по этому найденному пути.
Но скорость поиска вполне сносная, да и пользуются им редко:) http://risovach.ru/upload/2013/10/mem/vovka_32787390_orig_.jpeg
Не обязательно в топлевел и не обязательно все. Можно и в enabledFeatures.BlaBla, главное, чтобы был известный, фиксированный путь.
Ну главная проблема тут - автору пришла в голову идея, и он реализует ее напролом.
> Но меняться она может хоть каждую минуту. Как только это понадобится разрабам игры.
А если разрабы переименуют этот параметр, а не просто перенесут? :)
Насчет curl'а - у меня сейчас нету виртуалки с mingw, и настраивать ее вломы, так что х.з. Сборка на офсайте без TLS-SRP?
Да попробуй для начала бинарники curl и openssl с офсайта скачать. Вдруг они все правильно собрали?
> Алсо, гоу в тред
Пароль от гвфорума только дома, сорри.
БД, ну на счет монги не знаю, но может оптимизировать такого рода поиск разными техниками, например, динамическое програмирование. Ну и, конечно, может там объектов совсем не много, но если много, то имеет смысл задуматься о более рациональных способах поиска, даже в непроинформированом поиске есть лучше варианты, то же постепенное углубление или поиск лучем.
в монговских json'ах не может быть циклов. это древовидная структура
>может там объектов совсем не много
именно так. поэтому время поиска тут не является узким местом.
Больше тут доставляет "eval")