summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2019-05-08 11:59:39 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-06-03 11:30:05 +0200
commit724612780323916b94d882591d2bc93c09975ffb (patch)
treeabf9b4bf4c2ae2038642f2303fcb5beeaf095ccc
parentea7437acf1fd22a1c73d7185ac2c9b1df3a100e5 (diff)
downloadqtwebengine-chromium-724612780323916b94d882591d2bc93c09975ffb.tar.gz
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);
}