From 76847b46be9cb461b7a289cc004fe3d3d10814f2 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 17 Jul 2026 14:30:19 -0400 Subject: [PATCH] alsa: Don't crash when SDL_GetDefaultAudioInfo() is passed a NULL name. Fixes #16011. --- src/audio/alsa/SDL_alsa_audio.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index 8b2615e294..a3ee5fd9db 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -491,7 +491,6 @@ static int ALSA_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapt snd_pcm_stream_t stream; int card_index; const char *dev_name; - char *card_name = NULL; char final_name[256]; SDL_zero(final_name); @@ -515,11 +514,15 @@ static int ALSA_GetDefaultAudioInfo(char **name, SDL_AudioSpec *spec, int iscapt card_index = ALSA_snd_pcm_info_get_card(pcm_info); dev_name = ALSA_snd_pcm_info_get_name(pcm_info); - if (card_index >= 0 && ALSA_snd_card_get_name(card_index, &card_name) >= 0) { - SDL_snprintf(final_name, sizeof(final_name), "%s, %s", card_name, dev_name); - *name = SDL_strdup(final_name); - } else { - *name = SDL_strdup(dev_name ? dev_name : "Unknown ALSA Device"); + if (name) { + char *card_name = NULL; + if (card_index >= 0 && ALSA_snd_card_get_name(card_index, &card_name) >= 0) { + SDL_snprintf(final_name, sizeof(final_name), "%s, %s", card_name, dev_name); + free(card_name); /* This should NOT be SDL_free() */ + *name = SDL_strdup(final_name); + } else { + *name = SDL_strdup(dev_name ? dev_name : "Unknown ALSA Device"); + } } if (spec) {