From 03c3eee9f3378306d4a7016f39858e31defa5a37 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 12 Dec 2025 23:22:16 +0800 Subject: [PATCH] Fix header lookup bug in _buildCanonicalHeaders for mixed-case keys (#11884) * Initial plan * fix: handle mixed-case header keys in _buildCanonicalHeaders Create a lowercase-keyed map to properly lookup header values regardless of the input key casing. This prevents undefined values when headers have mixed-case keys like "Host" or "Content-Type". Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com> --- src/main/services/VolcengineService.ts | 12 ++++++++---- .../services/__tests__/VolcengineService.test.ts | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/services/VolcengineService.ts b/src/main/services/VolcengineService.ts index 47f5b8039..ae75d07f9 100644 --- a/src/main/services/VolcengineService.ts +++ b/src/main/services/VolcengineService.ts @@ -69,11 +69,15 @@ export function _buildCanonicalHeaders(headers: Record): { canonicalHeaders: string signedHeaders: string } { - const sortedKeys = Object.keys(headers) - .map((k) => k.toLowerCase()) - .sort() + // Create a lowercase-keyed map to handle mixed-case input headers + const lowercaseHeaders: Record = {} + for (const [key, value] of Object.entries(headers)) { + lowercaseHeaders[key.toLowerCase()] = value + } - const canonicalHeaders = sortedKeys.map((key) => `${key}:${headers[key]?.trim() || ''}`).join('\n') + '\n' + const sortedKeys = Object.keys(lowercaseHeaders).sort() + + const canonicalHeaders = sortedKeys.map((key) => `${key}:${lowercaseHeaders[key]?.trim() || ''}`).join('\n') + '\n' const signedHeaders = sortedKeys.join(';') diff --git a/src/main/services/__tests__/VolcengineService.test.ts b/src/main/services/__tests__/VolcengineService.test.ts index 789bd9311..955adc033 100644 --- a/src/main/services/__tests__/VolcengineService.test.ts +++ b/src/main/services/__tests__/VolcengineService.test.ts @@ -292,6 +292,21 @@ describe('VolcengineService', () => { expect(result.canonicalHeaders).toBe('host:example.com\nx-custom:\n') }) + + it('should handle mixed-case header keys', () => { + const headers = { + 'X-Date': '20240101T120000Z', + 'Content-Type': 'application/json', + Host: 'example.com' + } + + const result = _buildCanonicalHeaders(headers) + + expect(result.canonicalHeaders).toBe( + 'content-type:application/json\nhost:example.com\nx-date:20240101T120000Z\n' + ) + expect(result.signedHeaders).toBe('content-type;host;x-date') + }) }) describe('deriveSigningKey', () => {