diff options
Diffstat (limited to 'deckit/server.py')
| -rw-r--r-- | deckit/server.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/deckit/server.py b/deckit/server.py index bbd92cf..bddbb00 100644 --- a/deckit/server.py +++ b/deckit/server.py @@ -129,14 +129,17 @@ class Handler(BaseHTTPRequestHandler): return self._send(404, str(e).encode()) if fn is None: return self._send(404, b"unknown action") - length = int(self.headers.get("Content-Length", 0) or 0) + try: + length = int(self.headers.get("Content-Length", 0) or 0) + except ValueError: + return self._send(400, b"Invalid Content-Length") if self.headers.get("Content-Type") != "application/json" or not 0 < length <= 4096: return self._send(400, b"Expected a small JSON body") try: result = fn(json.loads(self.rfile.read(length))) except module.ModuleError as e: return self._send(400, str(e).encode()) - except (ValueError, AttributeError): + except (ValueError, AttributeError, TypeError, KeyError): return self._send(400, b"Invalid request") if result is None: return self._send(204) |
