output/PipeWire: add nullptr check to SetVolume()

If the PipeWire output has not yet been enabled and no thread_loop has
been created yet, a nullptr dereference in SetVolume() was possible
because nullptr was passed to pw_thread_loop_lock().
This commit is contained in:
Max Kellermann 2022-07-08 11:27:17 +02:00
parent ecee6f415b
commit 4d6ae6ffdd
2 changed files with 9 additions and 0 deletions

1
NEWS
View File

@ -6,6 +6,7 @@ ver 0.23.8 (not yet released)
* mixer
- better error messages
- alsa: fix setting volume before playback starts
- pipewire: fix crash bug
* support libfmt 9
ver 0.23.7 (2022/05/09)

View File

@ -312,6 +312,14 @@ PipeWireOutput::PipeWireOutput(const ConfigBlock &block)
void
PipeWireOutput::SetVolume(float _volume)
{
if (thread_loop == nullptr) {
/* the mixer is open (because it is a "global" mixer),
but Enable() on this output has not yet been
called */
volume = _volume;
return;
}
const PipeWire::ThreadLoopLock lock(thread_loop);
float newvol = _volume*_volume*_volume;