From 615558f6fb3fc15ad0ae1fe65b2faa08cd835750 Mon Sep 17 00:00:00 2001 From: cxbAsDev Date: Mon, 29 Jun 2026 11:26:11 +0800 Subject: [PATCH] fix(provider-usage): bound Anthropic usage error response reads to prevent OOM (#97614) Replace unbounded res.json() with readProviderJsonResponse in the fetchClaudeUsage error path to cap error body reads at 16 MiB. --- src/infra/provider-usage.fetch.claude.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/infra/provider-usage.fetch.claude.ts b/src/infra/provider-usage.fetch.claude.ts index 5881321b0dfb..68b2d55fae9e 100644 --- a/src/infra/provider-usage.fetch.claude.ts +++ b/src/infra/provider-usage.fetch.claude.ts @@ -7,6 +7,7 @@ import { } from "./provider-usage.fetch.shared.js"; import { clampPercent, PROVIDER_LABELS } from "./provider-usage.shared.js"; import type { ProviderUsageSnapshot, UsageWindow } from "./provider-usage.types.js"; +import { readProviderJsonResponse } from "../agents/provider-http-errors.js"; type ClaudeUsageResponse = { five_hour?: { utilization?: number; resets_at?: string }; @@ -151,9 +152,9 @@ export async function fetchClaudeUsage( if (!res.ok) { let message: string | undefined; try { - const data = (await res.json()) as { + const data = await readProviderJsonResponse<{ error?: { message?: unknown } | null; - }; + }>(res, "Anthropic usage error"); const raw = data?.error?.message; if (typeof raw === "string" && raw.trim()) { message = raw.trim();