Skip to content

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented May 17, 2023

This PR contains the following updates:

Package Change Age Confidence
starlette (changelog) ^0.22.0 -> ^0.47.0 age confidence
starlette (changelog) ==0.25.0 -> ==0.47.2 age confidence

GitHub Vulnerability Alerts

CVE-2023-30798

Impact

The MultipartParser using the package python-multipart accepts an unlimited number of multipart parts (form fields or files).

Processing too many parts results in high CPU usage and high memory usage, eventually leading to an OOM process kill.

This can be triggered by sending too many small form fields with no content, or too many empty files.

For this to take effect application code has to:

  • Have python-multipart installed and
  • call request.form()
    • or via another framework like FastAPI, using form field parameters or UploadFile parameters, which in turn calls request.form().

Patches

The vulnerability is solved in Starlette 0.25.0 by making the maximum fields and files customizable and with a sensible default (1000).

Applications will be secure by just upgrading their Starlette version to 0.25.0 (or FastAPI to 0.92.0).

If application code needs to customize the new max field and file number, there are new request.form() parameters (with the default values):

  • max_files=1000
  • max_fields=1000

Workarounds

Applications that don't install python-multipart or that don't use form fields are safe.

In older versions, it's also possible to instead of calling request.form() call request.stream() and parse the form data in internal code.

In most cases, the best solution is to upgrade the Starlette version.

References

This was reported in private by @​das7pad via internal email. He also coordinated the fix across multiple frameworks and parsers.

The details about how multipart/form-data is structured and parsed are in the RFC 7578.

CVE-2023-29159

Summary

When using StaticFiles, if there's a file or directory that starts with the same name as the StaticFiles directory, that file or directory is also exposed via StaticFiles which is a path traversal vulnerability.

Details

The root cause of this issue is the usage of os.path.commonprefix():
https://github.com/encode/starlette/blob/4bab981d9e870f6cee1bd4cd59b87ddaf355b2dc/starlette/staticfiles.py#L172-L174

As stated in the Python documentation (https://docs.python.org/3/library/os.path.html#os.path.commonprefix) this function returns the longest prefix common to paths.

When passing a path like /static/../static1.txt, os.path.commonprefix([full_path, directory]) returns ./static which is the common part of ./static1.txt and ./static, It refers to /static/../static1.txt because it is considered in the staticfiles directory. As a result, it becomes possible to view files that should not be open to the public.

The solution is to use os.path.commonpath as the Python documentation explains that os.path.commonprefix works a character at a time, it does not treat the arguments as paths.

PoC

In order to reproduce the issue, you need to create the following structure:

├── static
│   ├── index.html
├── static_disallow
│   ├── index.html
└── static1.txt

And run the Starlette app with:

import uvicorn
from starlette.applications import Starlette
from starlette.routing import Mount
from starlette.staticfiles import StaticFiles

routes = [
    Mount("/static", app=StaticFiles(directory="static", html=True), name="static"),
]

app = Starlette(routes=routes)

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

And running the commands:

curl --path-as-is 'localhost:8000/static/../static_disallow/'
curl --path-as-is 'localhost:8000/static/../static1.txt'

The static1.txt and the directory static_disallow are exposed.

Impact

Confidentiality is breached: An attacker may obtain files that should not be open to the public.

Credits

Security researcher Masashi Yamane of LAC Co., Ltd reported this vulnerability to JPCERT/CC Vulnerability Coordination Group and they contacted us to coordinate a patch for the security issue.

CVE-2024-47874

Summary

Starlette treats multipart/form-data parts without a filename as text form fields and buffers those in byte strings with no size limit. This allows an attacker to upload arbitrary large form fields and cause Starlette to both slow down significantly due to excessive memory allocations and copy operations, and also consume more and more memory until the server starts swapping and grinds to a halt, or the OS terminates the server process with an OOM error. Uploading multiple such requests in parallel may be enough to render a service practically unusable, even if reasonable request size limits are enforced by a reverse proxy in front of Starlette.

PoC

from starlette.applications import Starlette
from starlette.routing import Route

async def poc(request):
    async with request.form():
        pass

app = Starlette(routes=[
    Route('/', poc, methods=["POST"]),
])
curl http://localhost:8000 -F 'big=</dev/urandom'

Impact

This Denial of service (DoS) vulnerability affects all applications built with Starlette (or FastAPI) accepting form requests.

CVE-2025-54121

Summary

When parsing a multi-part form with large files (greater than the default max spool size) starlette will block the main thread to roll the file over to disk. This blocks the event thread which means we can't accept new connections.

Details

Please see this discussion for details: https://github.com/encode/starlette/discussions/2927#discussioncomment-13721403. In summary the following UploadFile code (copied from here) has a minor bug. Instead of just checking for self._in_memory we should also check if the additional bytes will cause a rollover.

    @&#8203;property
    def _in_memory(self) -> bool:
        # check for SpooledTemporaryFile._rolled
        rolled_to_disk = getattr(self.file, "_rolled", True)
        return not rolled_to_disk

    async def write(self, data: bytes) -> None:
        if self.size is not None:
            self.size += len(data)

        if self._in_memory:
            self.file.write(data)
        else:
            await run_in_threadpool(self.file.write, data)

I have already created a PR which fixes the problem: https://github.com/encode/starlette/pull/2962

PoC

See the discussion here for steps on how to reproduce.

Impact

To be honest, very low and not many users will be impacted. Parsing large forms is already CPU intensive so the additional IO block doesn't slow down starlette that much on systems with modern HDDs/SSDs. If someone is running on tape they might see a greater impact.


Release Notes

encode/starlette (starlette)

v0.47.2

Compare Source

Fixed

  • Make UploadFile check for future rollover #​2962.

New Contributors

Full Changelog: Kludex/starlette@0.47.1...0.47.2

v0.47.1: Version 0.47.1

Compare Source

Fixed

  • Use Self in TestClient.__enter__ #​2951
  • Allow async exception handlers to type-check #​2949

Full Changelog: Kludex/starlette@0.47.0...0.47.1

v0.47.0: Version 0.47.0

Compare Source

Added

  • Add support for ASGI pathsend extension #​2671.
  • Add partitioned attribute to Response.set_cookie #​2501.

Changed

  • Change methods parameter type from list[str] to Collection[str] #​2903.
  • Replace import typing by from typing import ... in the whole codebase #​2867.

Fixed

  • Mark ExceptionMiddleware.http_exception as async to prevent thread creation #​2922.

New Contributors

Full Changelog: Kludex/starlette@0.46.2...0.47.0

v0.46.2: Version 0.46.2

Compare Source

What's Changed

New Contributors

Full Changelog: Kludex/starlette@0.46.1...0.46.2

v0.46.1: Version 0.46.1

Compare Source

Fixed

  • Allow relative directory path when follow_symlinks=True #​2896.

Full Changelog: Kludex/starlette@0.46.0...0.46.1

v0.46.0: Version 0.46.0

Compare Source

Added

  • GZipMiddleware: Make sure Vary header is always added if a response can be compressed #​2865.

Fixed

  • Raise exception from background task on BaseHTTPMiddleware #​2812.
  • GZipMiddleware: Don't compress on server sent events #​2871.

Changed

  • MultiPartParser: Rename max_file_size to spool_max_size #​2780.

Deprecated

  • Add deprecated warning to TestClient(timeout=...) #​2840.

New Contributors

Full Changelog: Kludex/starlette@0.45.3...0.46.0

v0.45.3: Version 0.45.3

Compare Source

Fixed

Full Changelog: Kludex/starlette@0.45.2...0.45.3

v0.45.2: Version 0.45.2

Compare Source

Fixed
  • Make create_memory_object_stream compatible with old anyio versions once again, and bump anyio minimum version to 3.6.2 by @​graingert in #​2833.

Full Changelog: Kludex/starlette@0.45.1...0.45.2

v0.45.1: Version 0.45.1

Compare Source

Fixed
Refactor

Full Changelog: Kludex/starlette@0.45.0...0.45.1

v0.45.0: Version 0.45.0

Compare Source

Removed

Full Changelog: Kludex/starlette@0.44.0...0.45.0

v0.44.0: Version 0.44.0

Compare Source

Added
New Contributors

Full Changelog: Kludex/starlette@0.43.0...0.44.0

v0.43.0: Version 0.43.0

Compare Source

Removed

  • Remove deprecated allow_redirects argument from TestClient #​2808.

Added

  • Make UUID path parameter conversion more flexible #​2806.

New Contributors

Full Changelog: Kludex/starlette@0.42.0...0.43.0

v0.42.0: Version 0.42.0

Compare Source

Added
  • Raise ClientDisconnect on StreamingResponse #​2732.
Fixed
  • Use ETag from headers when parsing If-Range in FileResponse #​2761.
  • Follow directory symlinks in StaticFiles when follow_symlinks=True #​2711.
  • Bump minimum python-multipart version to 0.0.18 0ba8395.
  • Bump minimum httpx version to 0.27.0 #​2773.

New Contributors

Full Changelog: Kludex/starlette@0.41.3...0.42.0

v0.41.3: Version 0.41.3

Compare Source

Fixed
  • Exclude the query parameters from the scope[raw_path] on the TestClient #​2716.
  • Replace dict by Mapping on HTTPException.headers #​2749.
  • Correct middleware argument passing and improve factory pattern #​2752.

Full Changelog: Kludex/starlette@0.41.2...0.41.3

v0.41.2: Version 0.41.2

Compare Source

What's Changed

Full Changelog: Kludex/starlette@0.41.1...0.41.2

v0.41.1: Version 0.41.1

Compare Source

What's Changed


Full Changelog: Kludex/starlette@0.41.0...0.41.1

v0.41.0: Version 0.41.0

Compare Source

Added

v0.40.0: Version 0.40.0

Compare Source

This release fixes a Denial of service (DoS) via multipart/form-data requests.

You can view the full security advisory:
GHSA-f96h-pmfr-66vw

Fixed

  • Add max_part_size to MultiPartParser to limit the size of parts in multipart/form-data
    requests fd038f3.

v0.39.2: Version 0.39.2

Compare Source

Fixed
  • Allow use of request.url_for when only "app" scope is available #​2672.
  • Fix internal type hints to support python-multipart==0.0.12 #​2708.

Full Changelog: Kludex/starlette@0.39.1...0.39.2

v0.39.1: Version 0.39.1

Compare Source

Fixed
  • Avoid regex re-compilation in responses.py and schemas.py #​2700.
  • Improve performance of get_route_path by removing regular expression usage #​2701.
  • Consider FileResponse.chunk_size when handling multiple ranges #​2703.
  • Use token_hex for generating multipart boundary strings #​2702.

Full Changelog: Kludex/starlette@0.39.0...0.39.1

v0.39.0: Version 0.39.0

Compare Source

Added

  • Add support for HTTP Range to FileResponse #​2697

Full Changelog: Kludex/starlette@0.38.6...0.39.0

v0.38.6: Version 0.38.6

Compare Source

Fixed
  • Close unclosed MemoryObjectReceiveStream in TestClient #​2693.

Full Changelog: Kludex/starlette@0.38.5...0.38.6

v0.38.5: Version 0.38.5

Compare Source

Fixed
  • Schedule BackgroundTasks from within BaseHTTPMiddleware #​2688.
    This behavior was removed in 0.38.3, and is now restored.

Full Changelog: Kludex/starlette@0.38.4...0.38.5

v0.38.4: Version 0.38.4

Compare Source

Fixed
  • Ensure accurate root_path removal in get_route_path function #​2600

Full Changelog: Kludex/starlette@0.38.3...0.38.4

v0.38.3: Version 0.38.3

Compare Source

Added
Fixed
  • Don't poll for disconnects in BaseHTTPMiddleware via StreamingResponse #​2620.

Full Changelog: Kludex/starlette@0.38.2...0.38.3

v0.38.2: Version 0.38.2

Compare Source

Fixed
  • Fix routing.get_name() not to assume all routines have __name__ #​2648

Full Changelog: Kludex/starlette@0.38.1...0.38.2

v0.38.1: Version 0.38.1

Compare Source

Removed
  • Revert "Add support for ASGI pathsend extension" #​2649.

Full Changelog: Kludex/starlette@0.38.0...0.38.1

v0.38.0: Version 0.38.0

Compare Source

Added
  • Allow use of memoryview in StreamingResponse and Response #​2576
    and #​2577.
  • Send 404 instead of 500 when filename requested is too long on StaticFiles #​2583.
Changed
  • Fail fast on invalid Jinja2Template instantiation parameters #​2568.
  • Check endpoint handler is async only once #​2536.
Fixed
  • Add proper synchronization to WebSocketTestSession #​2597.

Full Changelog: Kludex/starlette@0.37.2...0.38.0

v0.37.2: Version 0.37.2

Compare Source

Added
  • Add bytes to _RequestData type #​2510.
Fixed
  • Revert "Turn scope["client"] to None on TestClient (#​2377)" #​2525.
  • Remove deprecated app argument passed to httpx.Client on the TestClient #​2526.

Full Changelog: Kludex/starlette@0.37.1...0.37.2

v0.37.1: Version 0.37.1

Compare Source

Fixed
  • Warn instead of raise for missing env file on Config #​2485.

Full Changelog: Kludex/starlette@0.37.0...0.37.1

v0.37.0: Version 0.37.0

Compare Source

Added

  • Support the WebSocket Denial Response ASGI extension #​2041.

Full Changelog: Kludex/starlette@0.36.3...0.37.0

v0.36.3: Version 0.36.3

Compare Source

Fixed
  • Create anyio.Event on async context #​2459.

Full Changelog: Kludex/starlette@0.36.2...0.36.3

v0.36.2: Version 0.36.2

Compare Source

Fixed
  • Upgrade python-multipart to 0.0.7 13e5c26.
  • Avoid duplicate charset on Content-Type #​2443.

Full Changelog: Kludex/starlette@0.36.1...0.36.2

v0.36.1: Version 0.36.1

Compare Source

Fixed

  • Check if "extensions" in scope before checking the extension #​2438.

Full Changelog: Kludex/starlette@0.36.0...0.36.1

v0.36.0: Version 0.36.0

Compare Source

Added
  • Add support for ASGI pathsend extension #​2435.
  • Cancel WebSocketTestSession on close #​2427.
  • Raise WebSocketDisconnect when WebSocket.send() excepts IOError #​2425.
  • Raise FileNotFoundError when the env_file parameter on Config is not valid #​2422.

Full Changelog: Kludex/starlette@0.35.1...0.36.0

v0.35.1: Version 0.35.1

Compare Source

Fixed
  • Stop using the deprecated "method" parameter in FileResponse inside of StaticFiles #​2406.
  • Make typing-extensions optional again #​2409.

Full Changelog: Kludex/starlette@0.35.0...0.35.1

v0.35.0: Version 0.35.0

Compare Source

Added
  • Add *args to Middleware and improve its type hints #​2381.
Fixed
  • Use Iterable instead Iterator on iterate_in_threadpool #​2362.
Changes
  • Handle root_path to keep compatibility with mounted ASGI applications and WSGI #​2400.
  • Turn scope["client"] to None on TestClient #​2377.

Full Changelog: Kludex/starlette@0.34.0...0.35.0

v0.34.0: Version 0.34.0

Compare Source

Added

  • Use ParamSpec for run_in_threadpool #​2375.
  • Add UploadFile.__repr__ #​2360.

Fixed

  • Merge URLs properly on TestClient #​2376.
  • Take weak ETags in consideration on StaticFiles #​2334.

Deprecated

  • Deprecate FileResponse(method=...) parameter #​2366.

Full Changelog: Kludex/starlette@0.33.0...0.34.0

v0.33.0: Version 0.33.0

Compare Source

Added

  • Add middleware per Route/WebSocketRoute #​2349.
  • Add middleware per Router #​2351.

Fixed

  • Do not overwrite "path" and "root_path" scope keys #​2352.
  • Set ensure_ascii=False on json.dumps() for WebSocket.send_json() #​2341.

v0.32.0: Version 0.32.0

Compare Source

Added

  • Send reason on WebSocketDisconnect #​2309.
  • Add domain parameter to SessionMiddleware #​2280.

Changed

  • Inherit from HTMLResponse instead of Response on _TemplateResponse #​2274.
  • Restore the Response.render type annotation to its pre-0.31.0 state #​2264.

Full Changelog: Kludex/starlette@0.31.1...0.32.0

v0.31.1: Version 0.31.1

Compare Source

Fixed
  • Fix import error when exceptiongroup isn't available #​2231.
  • Set url_for global for custom Jinja environments #​2230.

Full Changelog: Kludex/starlette@0.31.0...0.31.1

v0.31.0: Version 0.31.0

Compare Source

Added
  • Officially support Python 3.12 #​2214.
  • Support AnyIO 4.0 #​2211.
  • Strictly type annotate Starlette (strict mode on mypy) #​2180.
Fixed
  • Don't group duplicated headers on a single string when using the TestClient #​2219.

Full Changelog: Kludex/starlette@0.30.0...0.31.0

v0.30.0: Version 0.30.0

Compare Source

Removed

v0.29.0: Version 0.29.0

Compare Source

Added
  • Add follow_redirects parameter to TestClient #​2207.
  • Add __str__ to HTTPException and WebSocketException #​2181.
  • Warn users when using lifespan together with on_startup/on_shutdown #​2193.
  • Collect routes from Host to generate the OpenAPI schema #​2183.
  • Add request argument to TemplateResponse #​2191.
Fixed
  • Stop body_stream in case more_body=False on BaseHTTPMiddleware #​2194.

Full Changelog: Kludex/starlette@0.28.0...0.29.0

v0.28.0: Version 0.28.0

Compare Source

Changed
  • Reuse Request's body buffer for call_next in BaseHTTPMiddleware #​1692.
  • Move exception handling logic to Route #​2026.
Added
  • Add env parameter to Jinja2Templates, and deprecate **env_options #​2159.
  • Add clear error message when httpx is not installed #​2177.
Fixed
  • Allow "name" argument on templates url_for() #​2127.

Full Changelog: Kludex/starlette@0.27.0...0.28.0

v0.27.0: Version 0.27.0

Compare Source

This release fixes a path traversal vulnerability in StaticFiles. You can view the full security advisory:
GHSA-v5gw-mw7f-84px

Added
Fixed
  • Replace commonprefix by commonpath on StaticFiles 1797de4.
  • Convert ImportErrors into ModuleNotFoundError #​2135.
  • Correct the RuntimeError message content in websockets #​2141.

Full Changelog: Kludex/starlette@0.26.1...0.27.0

v0.26.1: Version 0.26.1

Compare Source

Fixed
  • Fix typing of Lifespan to allow subclasses of Starlette #​2077.

v0.26.0: Version 0.26.0

Compare Source

Added
Changed
  • Change url_for signature to return a URL instance #​1385.
Fixed
  • Allow "name" argument on url_for() and url_path_for() #​2050.
Deprecated
  • Deprecate on_startup and on_shutdown events #​2070.

Full Changelog: Kludex/starlette@0.25.0...0.26.0

v0.25.0: Version 0.25.0

Compare Source

Fixed
  • Limit the number of fields and files when parsing multipart/form-data on the MultipartParser 8c74c2c and #​2036.

v0.24.0: Version 0.24.0

Compare Source

Added
  • Allow StaticFiles to follow symlinks #​1683.
  • Allow Request.form() as a context manager #​1903.
  • Add size attribute to UploadFile #​1405.
  • Add env_prefix argument to Config #​1990.
  • Add template context processors #​1904.
  • Support str and datetime on expires parameter on the Response.set_cookie method #​1908.
Changed
  • Lazily build the middleware stack #​2017.
  • Make the file argument required on UploadFile #​1413.
  • Use debug extension instead of custom response template extension #​1991.
Fixed
  • Fix url parsing of ipv6 urls on URL.replace #​1965.

v0.23.1: Version 0.23.1

Compare Source

Fixed
  • Only stop receiving stream on body_stream if body is empty on the BaseHTTPMiddleware #​1940.

v0.23.0: Version 0.23.0

Compare Source

Added
  • Add headers parameter to the TestClient #​1966.
Deprecated
  • Deprecate Starlette and Router decorators #​1897.
Fixed
  • Fix bug on FloatConvertor regex #​1973.

Configuration

📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot changed the title Update dependency starlette to v0.27.0 [SECURITY] chore(deps): update dependency starlette to v0.27.0 [security] Jan 14, 2024
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.27.0 [security] chore(deps): update dependency starlette to v0.36.2 [security] Feb 5, 2024
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 10677d2 to f5b4222 Compare February 5, 2024 18:30
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from f5b4222 to 769dd8e Compare February 17, 2024 00:08
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.36.2 [security] chore(deps): update dependency starlette to v0.27.0 [security] Feb 17, 2024
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 769dd8e to 11a39e4 Compare February 17, 2024 04:26
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.27.0 [security] chore(deps): update dependency starlette to v0.36.2 [security] Feb 17, 2024
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 11a39e4 to b243571 Compare August 6, 2024 07:01
Copy link
Contributor Author

renovate bot commented Aug 6, 2024

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: poetry.lock
Updating dependencies
Resolving dependencies...


The current project's Python requirement (>=3.7,<4.0) is not compatible with some of the required packages Python requirement:
  - starlette requires Python >=3.9, so it will not be satisfied for Python >=3.7,<3.9
  - starlette requires Python >=3.9, so it will not be satisfied for Python >=3.7,<3.9
  - starlette requires Python >=3.9, so it will not be satisfied for Python >=3.7,<3.9

Because no versions of starlette match >0.47.0,<0.47.1 || >0.47.1,<0.47.2 || >0.47.2,<0.48.0
 and starlette (0.47.0) requires Python >=3.9, starlette is forbidden.
And because starlette (0.47.1) requires Python >=3.9, starlette is forbidden.
So, because starlette (0.47.2) requires Python >=3.9
 and slowapi depends on starlette (^0.47.0), version solving failed.

  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties
    
    For starlette, a possible solution would be to set the `python` property to ">=3.9,<4.0"
    For starlette, a possible solution would be to set the `python` property to ">=3.9,<4.0"
    For starlette, a possible solution would be to set the `python` property to ">=3.9,<4.0"

    https://python-poetry.org/docs/dependency-specification/#python-restricted-dependencies,
    https://python-poetry.org/docs/dependency-specification/#using-environment-markers

@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from b243571 to 48b6690 Compare September 23, 2024 23:19
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.36.2 [security] chore(deps): update dependency starlette to v0.27.0 [security] Sep 23, 2024
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 48b6690 to 4f0fcd5 Compare October 15, 2024 18:51
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.27.0 [security] chore(deps): update dependency starlette to v0.40.0 [security] Oct 15, 2024
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 4f0fcd5 to 03b8d70 Compare July 22, 2025 01:36
@renovate renovate bot changed the title chore(deps): update dependency starlette to v0.40.0 [security] chore(deps): update dependency starlette to v0.47.2 [security] Jul 22, 2025
@renovate renovate bot force-pushed the renovate/pypi-starlette-vulnerability branch from 03b8d70 to dae75b2 Compare August 10, 2025 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants