Fix escaping in regex search

This commit is contained in:
DarkPhoenix
2020-04-11 01:33:53 +03:00
parent 28137fa3f4
commit a1f8a7a930
2 changed files with 5 additions and 4 deletions

View File

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

View File

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