File CVE-2025-69225-forbid-non-ascii-in-range.patch of Package python-aiohttp.42491

From c7b7a044f88c71cefda95ec75cdcfaa4792b3b96 Mon Sep 17 00:00:00 2001
From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com>
Date: Sat, 3 Jan 2026 00:39:41 +0000
Subject: [PATCH] [PR #11887/7a067d19 backport][3.13] Reject non-ascii digits
 in Range header (#11903)

**This is a backport of PR #11887 as merged into master
(7a067d1905e1eeb921a50010dd0004990dbb3bf0).**

Co-authored-by: Sam Bull <git@sambull.org>
---
 aiohttp/web_request.py    | 2 +-
 tests/test_web_request.py | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

Index: aiohttp-3.9.3/aiohttp/web_request.py
===================================================================
--- aiohttp-3.9.3.orig/aiohttp/web_request.py
+++ aiohttp-3.9.3/aiohttp/web_request.py
@@ -597,7 +597,7 @@ class BaseRequest(MutableMapping[str, An
         if rng is not None:
             try:
                 pattern = r"^bytes=(\d*)-(\d*)$"
-                start, end = re.findall(pattern, rng)[0]
+                start, end = re.findall(pattern, rng, re.ASCII)[0]
             except IndexError:  # pattern was not found in header
                 raise ValueError("range not in acceptable format")
 
Index: aiohttp-3.9.3/tests/test_web_request.py
===================================================================
--- aiohttp-3.9.3.orig/tests/test_web_request.py
+++ aiohttp-3.9.3/tests/test_web_request.py
@@ -227,6 +227,13 @@ def test_range_to_slice_tail_stop() -> N
     assert req.content[req.http_range] == payload[-500:]
 
 
+def test_range_non_ascii() -> None:
+    # ५ = DEVANAGARI DIGIT FIVE
+    req = make_mocked_request("GET", "/", headers=CIMultiDict([("RANGE", "bytes=4-५")]))
+    with pytest.raises(ValueError, match="range not in acceptable format"):
+        req.http_range
+
+
 def test_non_keepalive_on_http10() -> None:
     req = make_mocked_request("GET", "/", version=HttpVersion(1, 0))
     assert not req.keep_alive
openSUSE Build Service is sponsored by