From f81e3e1d7852c05b4b737ac7dac4db95798f0117 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Wed, 9 Oct 2013 20:29:39 +0200 Subject: [PATCH] alsa: Fix crash when loading bare ALSA sink/source module-alsa-{sink,source}.c call pa_alsa_{sink,source}_new with mapping set to NULL. Guard against this, like the rest of the function does. module-alsa-card does not use NULL, so this went unnoticed so far. --- src/modules/alsa/alsa-sink.c | 18 ++++++++++-------- src/modules/alsa/alsa-source.c | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c index d3d5b19a3..e10e14e12 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -2032,14 +2032,16 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca map = m->core->default_channel_map; /* Pick sample spec overrides from the mapping, if any */ - if (mapping->sample_spec.format != PA_SAMPLE_INVALID) - ss.format = mapping->sample_spec.format; - if (mapping->sample_spec.rate != 0) - ss.rate = mapping->sample_spec.rate; - if (mapping->sample_spec.channels != 0) { - ss.channels = mapping->sample_spec.channels; - if (pa_channel_map_valid(&mapping->channel_map)) - pa_assert(pa_channel_map_compatible(&mapping->channel_map, &ss)); + if (mapping) { + if (mapping->sample_spec.format != PA_SAMPLE_INVALID) + ss.format = mapping->sample_spec.format; + if (mapping->sample_spec.rate != 0) + ss.rate = mapping->sample_spec.rate; + if (mapping->sample_spec.channels != 0) { + ss.channels = mapping->sample_spec.channels; + if (pa_channel_map_valid(&mapping->channel_map)) + pa_assert(pa_channel_map_compatible(&mapping->channel_map, &ss)); + } } /* Override with modargs if provided */ diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c index 8416ba8ae..2e93e0fec 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -1742,14 +1742,16 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p map = m->core->default_channel_map; /* Pick sample spec overrides from the mapping, if any */ - if (mapping->sample_spec.format != PA_SAMPLE_INVALID) - ss.format = mapping->sample_spec.format; - if (mapping->sample_spec.rate != 0) - ss.rate = mapping->sample_spec.rate; - if (mapping->sample_spec.channels != 0) { - ss.channels = mapping->sample_spec.channels; - if (pa_channel_map_valid(&mapping->channel_map)) - pa_assert(pa_channel_map_compatible(&mapping->channel_map, &ss)); + if (mapping) { + if (mapping->sample_spec.format != PA_SAMPLE_INVALID) + ss.format = mapping->sample_spec.format; + if (mapping->sample_spec.rate != 0) + ss.rate = mapping->sample_spec.rate; + if (mapping->sample_spec.channels != 0) { + ss.channels = mapping->sample_spec.channels; + if (pa_channel_map_valid(&mapping->channel_map)) + pa_assert(pa_channel_map_compatible(&mapping->channel_map, &ss)); + } } /* Override with modargs if provided */