summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2019-05-08 11:59:39 +0200
committerJüri Valdmann <juri.valdmann@qt.io>2019-05-15 08:21:08 +0000
commit7e110d51ae0f456e2bb8e273f52107d22196e479 (patch)
tree2a12bf14a2d43d0db4ffb089bb0d3a957abac3ef
parent599fa1c61c3ee9d86823033f3d5ab2743cfd78dd (diff)
Fix crashes due to pa_context_get_server_info
If the PulseAudio daemon has no sources and/or sinks, then the pa_server_info's default_source_name and/or default_sink_name fields will be null pointers. Assigning (const char *)nullptr to a std::string triggers a segfault. Task-number: QTBUG-75629 Change-Id: I056148af53110943f1ee025a6d94d484c8590c4e Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 8d400b021591c0b619269317e239d8a750ace140)
-rw-r--r--chromium/media/audio/pulse/audio_manager_pulse.cc3
-rw-r--r--chromium/media/audio/pulse/pulse_util.cc6
2 files changed, 6 insertions, 3 deletions
diff --git a/chromium/media/audio/pulse/audio_manager_pulse.cc b/chromium/media/audio/pulse/audio_manager_pulse.cc
index 3700506781f..264876cf70b 100644
--- a/chromium/media/audio/pulse/audio_manager_pulse.cc
+++ b/chromium/media/audio/pulse/audio_manager_pulse.cc
@@ -306,7 +306,8 @@ void AudioManagerPulse::AudioHardwareInfoCallback(pa_context* context,
manager->native_input_sample_rate_ = info->sample_spec.rate;
manager->native_channel_count_ = info->sample_spec.channels;
- manager->default_source_name_ = info->default_source_name;
+ if (info->default_source_name)
+ manager->default_source_name_ = info->default_source_name;
pa_threaded_mainloop_signal(manager->input_mainloop_, 0);
}
diff --git a/chromium/media/audio/pulse/pulse_util.cc b/chromium/media/audio/pulse/pulse_util.cc
index f2e686add5f..9c70ba49255 100644
--- a/chromium/media/audio/pulse/pulse_util.cc
+++ b/chromium/media/audio/pulse/pulse_util.cc
@@ -162,8 +162,10 @@ void GetDefaultDeviceIdCallback(pa_context* c,
const pa_server_info* info,
void* userdata) {
DefaultDevicesData* data = static_cast<DefaultDevicesData*>(userdata);
- data->input_ = info->default_source_name;
- data->output_ = info->default_sink_name;
+ if (info->default_source_name)
+ data->input_ = info->default_source_name;
+ if (info->default_sink_name)
+ data->output_ = info->default_sink_name;
pa_threaded_mainloop_signal(data->loop_, 0);
}