From 92287f219d85621e3e66a38bfebdaff742ebc781 Mon Sep 17 00:00:00 2001 From: Dmitry Kuznetsov Date: Mon, 12 Mar 2012 19:09:07 -0400 Subject: [PATCH] Return more correct HTTP status for Content-Length * 413 Request Entity Too Large for "too big" case * 411 Length Required for missing header case * 400 Bad Request for invalid header case --- r2/r2/config/middleware.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/r2/r2/config/middleware.py b/r2/r2/config/middleware.py index f0c0d8d11..34270d1a0 100644 --- a/r2/r2/config/middleware.py +++ b/r2/r2/config/middleware.py @@ -447,11 +447,24 @@ class LimitUploadSize(object): def __call__(self, environ, start_response): cl_key = 'CONTENT_LENGTH' if environ['REQUEST_METHOD'] == 'POST': - if ((cl_key not in environ) - or int(environ[cl_key]) > self.max_size): + if cl_key not in environ: r = Response() - r.status_code = 500 - r.content = 'request too big' + r.status_code = 411 + r.content = 'length required' + return r(environ, start_response) + + try: + cl_int = int(environ[cl_key]) + except ValueError: + r = Response() + r.status_code = 400 + r.content = 'bad request' + return r(environ, start_response) + + if cl_int > self.max_size: + r = Response() + r.status_code = 413 + r.content = 'request entity too large' return r(environ, start_response) return self.app(environ, start_response)