fix: Improve error messages on simple after request hook bugs

Root cause: In `src/flask/app.py`, the `process_response` method calls each `after_request` function and reassigns the response to its return value without checking whether the return value is `None`. When a hook

Resolved by BugSlayer
This commit is contained in:
shr7q 2026-04-22 19:32:44 -04:00
parent 2ac89889f4
commit 2d12e362ce

View file

@ -1406,11 +1406,21 @@ class Flask(App):
""" """
for func in ctx._after_request_functions: for func in ctx._after_request_functions:
response = self.ensure_sync(func)(response) response = self.ensure_sync(func)(response)
if response is None:
raise TypeError(
f"The after_request handler '{func.__name__}' must return a"
" Response object. It returned None."
)
for name in chain(ctx.request.blueprints, (None,)): for name in chain(ctx.request.blueprints, (None,)):
if name in self.after_request_funcs: if name in self.after_request_funcs:
for func in reversed(self.after_request_funcs[name]): for func in reversed(self.after_request_funcs[name]):
response = self.ensure_sync(func)(response) response = self.ensure_sync(func)(response)
if response is None:
raise TypeError(
f"The after_request handler '{func.__name__}' must return a"
" Response object. It returned None."
)
if not self.session_interface.is_null_session(ctx._get_session()): if not self.session_interface.is_null_session(ctx._get_session()):
self.session_interface.save_session(self, ctx._get_session(), response) self.session_interface.save_session(self, ctx._get_session(), response)