Skip to content

Commit

Permalink
Send 404 instead of 500 when filename requested is too long on `Stati…
Browse files Browse the repository at this point in the history
…cFiles` (#2583)

* Make "Filename too long" return 404 not 500

* Simplify code source

* Correct comment

---------

Co-authored-by: Jeremy Epstein <jeremy.epstein@seertechsolutions.com>
Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
  • Loading branch information
3 people authored Jun 1, 2024
1 parent 2655893 commit 4f16aed
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
9 changes: 7 additions & 2 deletions starlette/staticfiles.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

import errno
import importlib.util
import os
import stat
Expand Down Expand Up @@ -124,8 +125,12 @@ async def get_response(self, path: str, scope: Scope) -> Response:
)
except PermissionError:
raise HTTPException(status_code=401)
except OSError:
raise
except OSError as exc:
# Filename is too long, so it can't be a valid static file.
if exc.errno == errno.ENAMETOOLONG:
raise HTTPException(status_code=404)

raise exc

if stat_result and stat.S_ISREG(stat_result.st_mode):
# We have a static file to serve.
Expand Down
13 changes: 13 additions & 0 deletions tests/test_staticfiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,19 @@ def test_staticfiles_access_file_as_dir_returns_404(
assert response.text == "Not Found"


def test_staticfiles_filename_too_long(
tmpdir: Path, test_client_factory: TestClientFactory
) -> None:
routes = [Mount("/", app=StaticFiles(directory=tmpdir), name="static")]
app = Starlette(routes=routes)
client = test_client_factory(app)

path_max_size = os.pathconf("/", "PC_PATH_MAX")
response = client.get(f"/{'a' * path_max_size}.txt")
assert response.status_code == 404
assert response.text == "Not Found"


def test_staticfiles_unhandled_os_error_returns_500(
tmpdir: Path,
test_client_factory: TestClientFactory,
Expand Down

0 comments on commit 4f16aed

Please sign in to comment.