X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fform.py;h=76abab674bc0123deb3809fc1f3b332dba3ac89c;hb=b6f62b898efdc272130d3dbdd6742c5b785e7c7d;hp=3bad8fcec66ce17e259d22670b70b1557feb8f2d;hpb=820715646ba8a74897cae44036e03dc16528ec46;p=wrw.git diff --git a/wrw/form.py b/wrw/form.py index 3bad8fc..76abab6 100644 --- a/wrw/form.py +++ b/wrw/form.py @@ -7,9 +7,12 @@ def formparse(req): 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 @@ -81,7 +84,9 @@ class formpart(object): return ret def close(self): - self.fillbuf(-1) + while True: + if self.read(8192) == "": + break def __enter__(self): return self @@ -152,5 +157,10 @@ class multipart(object): 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