From 4a30397623b096591a67040b502950c167cd02ee Mon Sep 17 00:00:00 2001 From: Wesley Liddick Date: Wed, 8 Jul 2026 18:37:33 +0000 Subject: [PATCH] fix: prevent channel pricing overrides from mutating shared fallback pricing --- backend/internal/service/billing_service.go | 3 +++ backend/internal/service/model_pricing_resolver.go | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/backend/internal/service/billing_service.go b/backend/internal/service/billing_service.go index 4c265aed3c..89755c8922 100644 --- a/backend/internal/service/billing_service.go +++ b/backend/internal/service/billing_service.go @@ -771,6 +771,9 @@ func (s *BillingService) GetModelPricingWithChannel(model string, channelPricing if channelPricing == nil { return pricing, nil } + // 防止修改 fallbackPrices 中的共享指针 + cloned := *pricing + pricing = &cloned if channelPricing.InputPrice != nil { pricing.InputPricePerToken = *channelPricing.InputPrice pricing.InputPricePerTokenPriority = *channelPricing.InputPrice diff --git a/backend/internal/service/model_pricing_resolver.go b/backend/internal/service/model_pricing_resolver.go index 029cb80259..0cc7a0ac47 100644 --- a/backend/internal/service/model_pricing_resolver.go +++ b/backend/internal/service/model_pricing_resolver.go @@ -150,6 +150,10 @@ func (r *ModelPricingResolver) applyTokenOverrides(chPricing *ChannelModelPricin // 区间不匹配时回退到 BasePricing,也需要覆盖图片价格 if resolved.BasePricing == nil { resolved.BasePricing = &ModelPricing{} + } else { + // 防止修改 fallbackPrices 中的共享指针 + cloned := *resolved.BasePricing + resolved.BasePricing = &cloned } if chPricing.ImageOutputPrice != nil { resolved.BasePricing.ImageOutputPricePerToken = *chPricing.ImageOutputPrice @@ -163,6 +167,10 @@ func (r *ModelPricingResolver) applyTokenOverrides(chPricing *ChannelModelPricin // 否则用 flat 字段覆盖 BasePricing if resolved.BasePricing == nil { resolved.BasePricing = &ModelPricing{} + } else { + // 防止修改 fallbackPrices 中的共享指针 + cloned := *resolved.BasePricing + resolved.BasePricing = &cloned } if chPricing.InputPrice != nil {