From 9897f963c7dd161abc88e94cf1c3f6a45b623c49 Mon Sep 17 00:00:00 2001 From: Aditya Giri <74224708+adityagiri3600@users.noreply.github.com> Date: Sun, 22 Feb 2026 15:02:40 +0530 Subject: [PATCH 1/2] Handle malformed release versions in docs versions view --- pydotorg/tests/test_views.py | 10 ++++++++++ pydotorg/views.py | 2 ++ 2 files changed, 12 insertions(+) diff --git a/pydotorg/tests/test_views.py b/pydotorg/tests/test_views.py index b21c54b57..d6141e871 100644 --- a/pydotorg/tests/test_views.py +++ b/pydotorg/tests/test_views.py @@ -34,3 +34,13 @@ def test_download_index(self): self.assertContains(response, "Browse Python 3.6.0 Documentation") self.assertContains(response, "https://docs.python.org/3/whatsnew/3.6.html") self.assertContains(response, "What's new in Python 3.6") + + def test_docs_versions_ignores_malformed_release_version(self): + Release.objects.create( + name="Python 4", + is_published=True, + pre_release=False, + ) + + response = self.client.get(reverse("docs-versions")) + self.assertEqual(response.status_code, 200) diff --git a/pydotorg/views.py b/pydotorg/views.py index 2d609150a..38ec34f21 100644 --- a/pydotorg/views.py +++ b/pydotorg/views.py @@ -125,6 +125,8 @@ def get_context_data(self, **kwargs): # Get major.minor version ("3.14.0" -> "3.14") version_parts = full_version.split(".") + if len(version_parts) < 2: + continue major_minor = f"{version_parts[0]}.{version_parts[1]}" # For 3.2.0 and earlier, use X.Y instead of X.Y.0 From 8be035ebcde6fb278cb94bea95e6cebca89d9e36 Mon Sep 17 00:00:00 2001 From: Aditya Giri <74224708+adityagiri3600@users.noreply.github.com> Date: Sun, 22 Feb 2026 15:28:50 +0530 Subject: [PATCH 2/2] Avoid magic number in docs version guard --- pydotorg/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pydotorg/views.py b/pydotorg/views.py index 38ec34f21..82f516ff4 100644 --- a/pydotorg/views.py +++ b/pydotorg/views.py @@ -125,7 +125,7 @@ def get_context_data(self, **kwargs): # Get major.minor version ("3.14.0" -> "3.14") version_parts = full_version.split(".") - if len(version_parts) < 2: + if len(version_parts) < SEMANTIC_VERSION_PARTS - 1: continue major_minor = f"{version_parts[0]}.{version_parts[1]}"