From 15e203ece67d280b627e2e84e2549eda93788c0b Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Fri, 13 Mar 2026 17:30:04 -0400 Subject: [PATCH] sdk: fix nil-map panic in FetchMediaAudio Initialize Audio.Outputs before assigning entries and create placeholder outputs when configuration references unknown OutputToken values. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- sdk/media.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sdk/media.go b/sdk/media.go index 205db3b..d872026 100644 --- a/sdk/media.go +++ b/sdk/media.go @@ -110,7 +110,9 @@ func (dw *deviceWrapper) FetchMediaVideo(ctx context.Context) Video { } func (dw *deviceWrapper) FetchMediaAudio(ctx context.Context) Audio { - out := Audio{} + out := Audio{ + Outputs: make(map[onvif.ReferenceToken]*AudioOutput), + } if sources, err := media.Call_GetAudioSources(ctx, dw.client, media.GetAudioSources{}); err == nil { for _, src := range sources.AudioSources { @@ -157,7 +159,12 @@ func (dw *deviceWrapper) FetchMediaAudio(ctx context.Context) Audio { } if configurations, err := media.Call_GetAudioOutputConfigurations(ctx, dw.client, media.GetAudioOutputConfigurations{}); err == nil { for _, config := range configurations.Configurations { - out.Outputs[config.OutputToken].Configurations = append(out.Outputs[config.OutputToken].Configurations, config) + ao, found := out.Outputs[config.OutputToken] + if !found { + ao = &AudioOutput{} + out.Outputs[config.OutputToken] = ao + } + ao.Configurations = append(ao.Configurations, config) } } else { Logger.Trace().Err(err).Str("rpc", "GetAnalyticsConfiguration").Msg("audio")