# 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')
for i, afile in enumerate(gamefiles):
sys.stdout.write('- Section {3}\
-
\n'.format(formname, dungeon.uname, afile, i + 1))
+ \n'.format(html.escape(formname), dungeon.uname, afile, i + 1))
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")
for name in namelist:
- sys.stdout.write(linkstr.format(name))
+ sys.stdout.write(linkstr.format(html.escape(name)))
sys.stdout.write("
\n")
sys.stdout.write(rlgall.pend)