buf = {}
buf.update(urlparse.parse_qsl(req.query))
if req.ihead.get("Content-Type") == "application/x-www-form-urlencoded":
- if req.input.limit > 2 ** 20:
- raise ValueError("x-www-form-urlencoded data is absurdly long")
- rbody = req.input.read()
+ try:
+ rbody = req.input.read(2 ** 20)
+ except IOError as exc:
+ return exc
+ if len(rbody) >= 2 ** 20:
+ return ValueError("x-www-form-urlencoded data is absurdly long")
buf.update(urlparse.parse_qsl(rbody))
return buf
return ret
def close(self):
- self.fillbuf(-1)
+ while True:
+ if self.read(8192) == "":
+ break
def __enter__(self):
return self
self.lastpart.parsehead()
return self.lastpart
-def formdata(req):
- return req.item(formparse)
+def formdata(req, onerror=Exception):
+ data = req.item(formparse)
+ if isinstance(data, Exception):
+ if onerror is Exception:
+ raise data
+ return onerror
+ return data