From 12f56db14f3394f06ab580d566de46481222f737 Mon Sep 17 00:00:00 2001 From: Ignasi Barrera Date: Wed, 17 Jun 2026 10:36:33 +0200 Subject: [PATCH] translator: add nil checks for tool call ids before deferencing the pointers Signed-off-by: Ignasi Barrera --- internal/translator/anthropic_helper.go | 4 ++++ internal/translator/gemini_helper.go | 3 +++ internal/translator/openai_awsbedrock.go | 3 +++ 3 files changed, 10 insertions(+) diff --git a/internal/translator/anthropic_helper.go b/internal/translator/anthropic_helper.go index 2e919789ee..75c1e681a2 100644 --- a/internal/translator/anthropic_helper.go +++ b/internal/translator/anthropic_helper.go @@ -429,6 +429,10 @@ func openAIMessageToAnthropicMessageRoleAssistant(openAiMessage *openai.ChatComp // Handle tool_calls (if any). for i := range openAiMessage.ToolCalls { toolCall := &openAiMessage.ToolCalls[i] + if toolCall.ID == nil { + err = fmt.Errorf("%w: tool_call at index %d is missing required field 'id'", internalapi.ErrInvalidRequestBody, i) + return + } var input map[string]any if err = json.Unmarshal([]byte(toolCall.Function.Arguments), &input); err != nil { err = fmt.Errorf("failed to unmarshal tool call arguments: %w", err) diff --git a/internal/translator/gemini_helper.go b/internal/translator/gemini_helper.go index d3ac0f5627..be32bd9a64 100644 --- a/internal/translator/gemini_helper.go +++ b/internal/translator/gemini_helper.go @@ -277,6 +277,9 @@ func assistantMsgToGeminiParts(msg *openai.ChatCompletionAssistantMessageParam) // Handle tool calls in the assistant message. knownToolCalls := make(map[string]string) for i, toolCall := range msg.ToolCalls { + if toolCall.ID == nil { + return nil, nil, fmt.Errorf("%w: tool_call at index %d is missing required field 'id'", internalapi.ErrInvalidRequestBody, i) + } knownToolCalls[*toolCall.ID] = toolCall.Function.Name var parsedArgs map[string]any if err := json.Unmarshal([]byte(toolCall.Function.Arguments), &parsedArgs); err != nil { diff --git a/internal/translator/openai_awsbedrock.go b/internal/translator/openai_awsbedrock.go index 39afb833af..7f10ad6764 100644 --- a/internal/translator/openai_awsbedrock.go +++ b/internal/translator/openai_awsbedrock.go @@ -414,6 +414,9 @@ func (o *openAIToAWSBedrockTranslatorV1ChatCompletion) openAIMessageToBedrockMes for i := range openAiMessage.ToolCalls { toolCall := &openAiMessage.ToolCalls[i] + if toolCall.ID == nil { + return nil, fmt.Errorf("%w: tool_call at index %d is missing required field 'id'", internalapi.ErrInvalidRequestBody, i) + } input, err := unmarshalToolCallArguments(toolCall.Function.Arguments) if err != nil { return nil, err