From a1f8a7a930c525d6e936485e6ad763d44b9f053d Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 11 Apr 2020 01:33:53 +0300 Subject: [PATCH] Fix escaping in regex search --- eos/db/gamedata/queries.py | 6 +++--- service/market.py | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/eos/db/gamedata/queries.py b/eos/db/gamedata/queries.py index c88283bfb..3d9907491 100644 --- a/eos/db/gamedata/queries.py +++ b/eos/db/gamedata/queries.py @@ -64,7 +64,7 @@ else: return deco -def sqlizeString(line): +def sqlizeNormalString(line): # Escape backslashes first, as they will be as escape symbol in queries # Then escape percent and underscore signs # Finally, replace generic wildcards with sql-style wildcards @@ -316,7 +316,7 @@ def searchItems(nameLike, where=None, join=None, eager=None): items = gamedata_session.query(Item).options(*processEager(eager)).join(*join) for token in nameLike.split(' '): - token_safe = "%{0}%".format(sqlizeString(token)) + token_safe = "%{0}%".format(sqlizeNormalString(token)) if where is not None: items = items.filter(and_(Item.name.like(token_safe, escape="\\"), where)) else: @@ -353,7 +353,7 @@ def searchSkills(nameLike, where=None, eager=None): items = gamedata_session.query(Item).options(*processEager(eager)).join(Item.group, Group.category) for token in nameLike.split(' '): - token_safe = "%{0}%".format(sqlizeString(token)) + token_safe = "%{0}%".format(sqlizeNormalString(token)) if where is not None: items = items.filter(and_(Item.name.like(token_safe, escape="\\"), Category.ID == 16, where)) else: diff --git a/service/market.py b/service/market.py index a67fbb4e4..40559b7e4 100644 --- a/service/market.py +++ b/service/market.py @@ -144,7 +144,7 @@ class SearchWorkerThread(threading.Thread): else: filters = [None] - if request.strip().startswith('re:'): + if request.strip().lower().startswith('re:'): requestTokens = self._prepareRequestRegex(request[3:]) else: requestTokens = self._prepareRequestNormal(request) @@ -205,6 +205,7 @@ class SearchWorkerThread(threading.Thread): if thisEscaped: currentToken += char elif char == '\\': + currentToken += char nextEscaped = True elif char == '[': currentToken += char