diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2019-05-08 11:59:39 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-06-03 11:30:05 +0200 |
commit | 724612780323916b94d882591d2bc93c09975ffb (patch) | |
tree | abf9b4bf4c2ae2038642f2303fcb5beeaf095ccc | |
parent | ea7437acf1fd22a1c73d7185ac2c9b1df3a100e5 (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.cc | 3 | ||||
-rw-r--r-- | chromium/media/audio/pulse/pulse_util.cc | 6 |
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); } |