Skip to content

Commit 4d5b6a3

Browse files
committed
Make cgi.templating more fault-tolerant towards invalid requests.
1 parent 9ca1a1a commit 4d5b6a3

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

roundup/cgi/templating.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -535,14 +535,14 @@ def __getitem__(self, item):
535535
value = lookupIds(self._db, prop,
536536
handleListCGIValue(form[item]), fail_ok=1)
537537
elif isinstance(prop, hyperdb.Link):
538-
value = form[item].value.strip()
538+
value = form.getfirst(item).strip()
539539
if value:
540540
value = lookupIds(self._db, prop, [value],
541541
fail_ok=1)[0]
542542
else:
543543
value = None
544544
else:
545-
value = form[item].value.strip() or None
545+
value = form.getfirst(item).strip() or None
546546
else:
547547
if isinstance(prop, hyperdb.Multilink):
548548
value = []
@@ -2225,10 +2225,10 @@ def _parse_sort(self, var, name):
22252225
key = '%s%s%d'%(special, name, idx)
22262226
while key in self.form:
22272227
self.special_char = special
2228-
fields.append (self.form[key].value)
2228+
fields.append(self.form.getfirst(key))
22292229
dirkey = '%s%sdir%d'%(special, name, idx)
22302230
if dirkey in self.form:
2231-
dirs.append(self.form[dirkey].value)
2231+
dirs.append(self.form.getfirst(dirkey))
22322232
else:
22332233
dirs.append(None)
22342234
idx += 1
@@ -2239,7 +2239,7 @@ def _parse_sort(self, var, name):
22392239
if key in self.form and not fields:
22402240
fields = handleListCGIValue(self.form[key])
22412241
if dirkey in self.form:
2242-
dirs.append(self.form[dirkey].value)
2242+
dirs.append(self.form.getfirst(dirkey))
22432243
if fields: # only try other special char if nothing found
22442244
break
22452245
for f, d in map(None, fields, dirs):
@@ -2302,31 +2302,25 @@ def _post_init(self):
23022302
for name in ':search_text @search_text'.split():
23032303
if self.form.has_key(name):
23042304
self.special_char = name[0]
2305-
try:
2306-
self.search_text = self.form[name].value
2307-
except AttributeError:
2308-
# http://psf.upfronthosting.co.za/roundup/meta/issue111
2309-
# Multiple search_text, probably some kind of spambot.
2310-
# Use first value.
2311-
self.search_text = self.form[name][0].value
2305+
self.search_text = self.form.getfirst(name)
23122306

23132307
# pagination - size and start index
23142308
# figure batch args
23152309
self.pagesize = 50
23162310
for name in ':pagesize @pagesize'.split():
23172311
if self.form.has_key(name):
23182312
self.special_char = name[0]
2319-
self.pagesize = int(self.form[name].value)
2313+
self.pagesize = int(self.form.getfirst(name))
23202314

23212315
self.startwith = 0
23222316
for name in ':startwith @startwith'.split():
23232317
if self.form.has_key(name):
23242318
self.special_char = name[0]
2325-
self.startwith = int(self.form[name].value)
2319+
self.startwith = int(self.form.getfirst(name))
23262320

23272321
# dispname
23282322
if self.form.has_key('@dispname'):
2329-
self.dispname = self.form['@dispname'].value
2323+
self.dispname = self.form.getfirst('@dispname')
23302324
else:
23312325
self.dispname = None
23322326

test/test_templating.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,22 @@ def get(entry, key):
7272

7373
class HTMLClassTestCase(TemplatingTestCase) :
7474

75+
def test_link(self):
76+
"""Make sure lookup of a Link property works even in the
77+
presence of multiple values in the form."""
78+
def lookup(key) :
79+
self.assertEqual(key, key.strip())
80+
return "Status%s"%key
81+
self.form.list.append(MiniFieldStorage("status", "1"))
82+
self.form.list.append(MiniFieldStorage("status", "2"))
83+
status = hyperdb.Link("status")
84+
self.client.db.classes = dict \
85+
( issue = MockNull(getprops = lambda : dict(status = status))
86+
, status = MockNull(get = lambda id, name : id, lookup = lookup)
87+
)
88+
cls = HTMLClass(self.client, "issue")
89+
cls["status"]
90+
7591
def test_multilink(self):
7692
"""`lookup` of an item will fail if leading or trailing whitespace
7793
has not been stripped.

0 commit comments

Comments
 (0)