From 2ac2b445fcb81a3e6439e94cdefc2a482eab4fd1 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Tue, 26 May 2020 14:57:42 +0300 Subject: [PATCH] stream-restore: Fix a potential crash in pa_namereg_is_valid_name() pa_namereg_is_valid_name() will hit an assertion if the name string is NULL. Maybe it would make sense to change pa_namereg_is_valid_name() so that it would return false on NULL, but I didn't want to change the function semantics at this time. e->device and e->card can be NULL even when device_valid and card_valid are set to true if the database contains bad data. I ran into this crash while developing new code, I haven't seen the crash in the wild. --- src/modules/module-stream-restore.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c index b6358fcca..a86e6bc31 100644 --- a/src/modules/module-stream-restore.c +++ b/src/modules/module-stream-restore.c @@ -1144,12 +1144,12 @@ static struct entry *entry_read(struct userdata *u, const char *name) { if (!pa_tagstruct_eof(t)) goto fail; - if (e->device_valid && !pa_namereg_is_valid_name(e->device)) { + if (e->device_valid && (!e->device || !pa_namereg_is_valid_name(e->device))) { pa_log_warn("Invalid device name stored in database for stream %s", name); goto fail; } - if (e->card_valid && !pa_namereg_is_valid_name(e->card)) { + if (e->card_valid && (!e->card || !pa_namereg_is_valid_name(e->card))) { pa_log_warn("Invalid card name stored in database for stream %s", name); goto fail; }