Ticket #4540: echelon_escape_like.patch

File echelon_escape_like.patch, 1.6 KB (added by user1, 7 years ago)

This escapes _, %, [, ], and \ in 3 places that sqlalchemy's ilike method is used. (first upload was sloppy. forgot to remove some logging )

  • source/tools/XpartaMuPP/EcheLOn.py

     
    4545      Retrieves the profile for the specified JID
    4646    """
    4747    stats = {}
    48     player = db.query(Player).filter(Player.jid.ilike(str(JID)))
     48    player = db.query(Player).filter(Player.jid.ilike(str(JID).translate(str.maketrans({"_": r"\_", "[": r"\[", "]": r"\]", "%": r"\%", "\\": r"\\"})), "\\"))
    4949
    5050    if not player.first():
    5151      return
     
    109109               dict.values(gamereport['playerStates']))):
    110110      return None
    111111
    112     players = map(lambda jid: db.query(Player).filter(Player.jid.ilike(str(jid))).first(),
     112    players = map(lambda jid: db.query(Player).filter(Player.jid.ilike(str(jid).translate(str.maketrans({"_": r"\_", "[": r"\[", "]": r"\]", "%": r"\%", "\\": r"\\"})), "\\")).first(),
    113113                  dict.keys(gamereport['playerStates']))
    114114
    115115    winning_jid = list(dict.keys({jid: state for jid, state in
     
    154154    game = Game(map=gamereport['mapName'], duration=int(gamereport['timeElapsed']), teamsLocked=bool(gamereport['teamsLocked']), matchID=gamereport['matchID'])
    155155    game.players.extend(players)
    156156    game.player_info.extend(playerInfos)
    157     game.winner = db.query(Player).filter(Player.jid.ilike(str(winning_jid))).first()
     157    game.winner = db.query(Player).filter(Player.jid.ilike(str(winning_jid).translate(str.maketrans({"_": r"\_", "[": r"\[", "]": r"\]", "%": r"\%", "\\": r"\\"})), "\\")).first()
    158158    db.add(game)
    159159    db.commit()
    160160    return game