From 76847b46be9cb461b7a289cc004fe3d3d10814f2 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
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 8b2615e2946da..a3ee5fd9dbd16 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) {