diff --git a/poorwsgi/request.py b/poorwsgi/request.py index 9e83b90..7f3fd68 100644 --- a/poorwsgi/request.py +++ b/poorwsgi/request.py @@ -175,7 +175,15 @@ def uri(self): @property def path(self): """Path part of url.""" - return self.__environ.get("PATH_INFO").encode("iso-8859-1").decode() + try: + return ( + self.__environ.get("PATH_INFO").encode("iso-8859-1").decode() + ) + except (UnicodeDecodeError, UnicodeEncodeError) as err: + log.warning("Invalid PATH_INFO encoding: %s", err) + raise HTTPException( + HTTP_BAD_REQUEST, error="Invalid PATH_INFO encoding" + ) from err @property def query(self): diff --git a/poorwsgi/results.py b/poorwsgi/results.py index 30214ce..be6da52 100644 --- a/poorwsgi/results.py +++ b/poorwsgi/results.py @@ -104,7 +104,7 @@ def internal_server_error(req, *_): in dispatch_table.errors. If poor_Debug variable is to On, Tracaback will be generated. """ - handler = {"module": None, "name": None} + handler = {"module": None, "name": None, "args": None} if req.uri_handler: handler["module"] = req.uri_handler.__module__ handler["name"] = req.uri_handler.__name__ @@ -187,6 +187,13 @@ def bad_request(req, error=None): """ 400 Bad Request server error handler. """ if error: log.warning("400 - Bad Request: %s", error) + path = "[ NOT PARSED ]" + try: + path = req.path + except HTTPException: + # If obtaining req.path fails, keep the default placeholder value. + pass + content = ( "\n" "\n" @@ -203,10 +210,12 @@ def bad_request(req, error=None): "
\n" "Method %s for %s uri.
\n" + "%s\n" "