From f4e2969fec2f1e1078785917703d69670b1defd9 Mon Sep 17 00:00:00 2001 From: timmy Date: Thu, 6 Aug 2026 11:16:40 +0000 Subject: [PATCH] fix: handle malformed Gitea collections (#99) --- src/main.py | 5 +++++ tests/test_context_timeout.py | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main.py b/src/main.py index d38465c..29570a8 100644 --- a/src/main.py +++ b/src/main.py @@ -81,6 +81,11 @@ async def context() -> JSONResponse: raise ValueError("Gitea current-user response was not an object") if not all(field in user_data for field in ("id", "login")): raise ValueError("Gitea current-user response did not include id and login") + if any( + data is not None and not isinstance(data, list) + for data in (repo_data, issues_data, prs_data) + ): + raise ValueError("Gitea collection response was not a list") except Exception as e: error_message = ( f"Gitea context request timed out after {CONTEXT_TIMEOUT_SECONDS:g}s" diff --git a/tests/test_context_timeout.py b/tests/test_context_timeout.py index fdb0358..c5def13 100644 --- a/tests/test_context_timeout.py +++ b/tests/test_context_timeout.py @@ -203,6 +203,29 @@ async def test_context_normalizes_null_collection_payloads(monkeypatch): assert context["pull_requests"] == [] +@pytest.mark.anyio +async def test_context_returns_fallback_for_malformed_collection_payloads(monkeypatch): + async def user(): + return {"id": 1, "login": "timmy"} + + async def malformed_collection(): + return {"message": "unexpected upstream shape"} + + monkeypatch.setattr(main, "current_user", user) + monkeypatch.setattr(main, "repos", malformed_collection) + monkeypatch.setattr(main, "issues", malformed_collection) + monkeypatch.setattr(main, "pull_requests", malformed_collection) + + response = await main.context() + context = json.loads(response.body) + + assert response.status_code == 200 + assert context["repos"] == [] + assert context["issues"] == [] + assert context["pull_requests"] == [] + assert context["error"] == "Gitea collection response was not a list" + + @pytest.mark.anyio async def test_context_normalizes_nullable_user_profile_fields(monkeypatch): async def user(): -- 2.43.0