# HG changeset patch # User John "Elwin" Edwards # Date 1395702088 25200 # Node ID 6138c27d195082fe0554b319b4d05b35e07626c9 # Parent 955c2fd68dcf812e32cfc63bde712f5ddcae47bc Escape the player's name when printing it into HTML. Non-alphanumeric characters in names may eventually be possible. diff -r 955c2fd68dcf -r 6138c27d1950 py/rlgall.py --- a/py/rlgall.py Mon Mar 24 09:43:28 2014 -0700 +++ b/py/rlgall.py Mon Mar 24 16:01:28 2014 -0700 @@ -7,6 +7,7 @@ import psycopg2 from datetime import datetime import pytz +import html # Configuration logdir = "/var/dgl/var/games/roguelike/" @@ -74,14 +75,10 @@ except ValueError: return None -def ttyreclink(text, name, game, gtime): - "Returns a link to the ttyrec archivist" - lstr = '{3}' - return lstr.format(name, game, gtime, text) - def playerlink(name): "Returns a link to a player's page" - lstr = '' + name + '' + escname = html.escape(name) + lstr = '' + escname + '' return lstr def linktoArchive(entry): @@ -89,7 +86,8 @@ lstr = '{3}' linktext = entry["endt"].strftime("%Y/%m/%d %H:%M:%S") stamp = int(entry["endt"].timestamp()) - return lstr.format(entry["name"], entry["game"].uname, stamp, linktext) + escname = html.escape(entry["name"]) + return lstr.format(escname, entry["game"].uname, stamp, linktext) def maketablerow(cells, isheader=None): "Takes a list of strings and returns a HTML table row with each string \ @@ -525,16 +523,17 @@ "Generate a player's HTML page" # Write the beginning of the page ppagefi = open(ppagename.format(pname), "w", encoding="utf-8") - ppagefi.write(phead.format(pname)) + cleanpname = html.escape(pname) + ppagefi.write(phead.format(cleanpname)) ppagefi.write(ptop) - ppagefi.write(navplayer.format(pname)) - ppagefi.write(pti.format("Results for " + pname)) + ppagefi.write(navplayer.format(cleanpname)) + ppagefi.write(pti.format("Results for " + cleanpname)) for game in gamelist: ppagefi.write(secthead.format(game.name)) entries = game.getPlayer(pname) if not entries: - ppagefi.write("
" + pname + " has not yet completed an expedition\ - in this dungeon.
\n") + ppagefi.write("
" + cleanpname + " has not yet completed an " + + "expedition in this dungeon.
\n") else: entries.sort(key=lambda e: e["endt"]) printTable(entries, game.pfields, ppagefi) diff -r 955c2fd68dcf -r 6138c27d1950 web/archive.cgi --- a/web/archive.cgi Mon Mar 24 09:43:28 2014 -0700 +++ b/web/archive.cgi Mon Mar 24 16:01:28 2014 -0700 @@ -7,6 +7,7 @@ import calendar from datetime import datetime import pytz +import html import rlgall #import cgitb @@ -36,7 +37,7 @@ def input_name(outf, defaultval=None): defstr = '
Adventurer\'s name:
\n' if defaultval: - outf.write(defstr.format(defaultval)) + outf.write(defstr.format(html.escape(defaultval))) else: outf.write('
Adventurer\'s Name:
\n') return @@ -124,7 +125,7 @@ try: os.stat(ttyrecbase + formname) except OSError: - errlist.append(cantfind.format(cgi.escape(formname))) + errlist.append(cantfind.format(html.escape(formname))) return None return formname @@ -139,7 +140,7 @@ for agame in rlgall.gamelist: if agame.uname == formgame: return agame - errlist.append(cantfind.format(cgi.escape(formgame))) + errlist.append(cantfind.format(html.escape(formgame))) return None def processtime(fdata, errlist, hlist): @@ -156,7 +157,7 @@ try: utime = int(formtime) except ValueError: - errlist.append(badtime.format(cgi.escape(formtime))) + errlist.append(badtime.format(html.escape(formtime))) return None else: if utime < 0: @@ -261,7 +262,6 @@ if lerrors: errlist.extend(lerrors) return None - #return calendar.timegm([year, month, day, hour, minute, second, 0, 0, 0]) return datetime(year, month, day, hour, minute, second, 0, pytz.utc) # Begin processing @@ -324,13 +324,13 @@ sys.stdout.write("

No record found.

\n") elif len(gamefiles) == 1: sys.stdout.write('

1 ttyrec found.\ -

\n'.format(formname, dungeon.uname, gamefiles[0])) +

\n'.format(html.escape(formname), dungeon.uname, gamefiles[0])) else: sys.stdout.write('

{0}-part ttyrec found.

\n'.format(len(gamefiles))) sys.stdout.write('\n') if isnotsearch: sys.stdout.write(infop) diff -r 955c2fd68dcf -r 6138c27d1950 web/scoring/players/index.cgi --- a/web/scoring/players/index.cgi Mon Mar 24 09:43:28 2014 -0700 +++ b/web/scoring/players/index.cgi Mon Mar 24 16:01:28 2014 -0700 @@ -2,6 +2,7 @@ import os import sys +import html import rlgall playerdir = "/var/www/lighttpd/scoring/players/" @@ -26,7 +27,7 @@ else: sys.stdout.write("\n") sys.stdout.write(rlgall.pend)