pipewire/spa/plugins
Alper Nebi Yasak e726c5f6db alsa-ucm: Fix possible segfault from recursion due to too many devices
While trying to figure out device subsets that have aren't internally
contain conflicting devices, we walk through all possible subsets and
check each set if it satisfies ConflictingDevices/SupportedDevices
listed in UCM configuration. For a better user experience, we want to
skip subsets that are fully included in another valid subset we will
also generate.

The iterate_device_subsets() function that achieves the former is
intentionally in iterative form to avoid a stack overflow, since it will
walk through 2^n sets. However, the iterate_maximal_device_subsets()
function that skips incomplete sets is in recursive form, as I had
assumed tail-call optimization would take care of the potential problem.

Convert iterate_maximal_device_subsets() to an iterative form, because
the recursion seems to trigger a segfault with more than 16 devices on
PulseAudio. It doesn't seem to happen on PipeWire, but it's better to
not leave it to luck.

Link: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/838
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
2024-12-04 20:40:16 +00:00
..
aec spa: add spa_json_begin_array/object and relaxed versions 2024-09-16 09:50:33 +02:00
alsa alsa-ucm: Fix possible segfault from recursion due to too many devices 2024-12-04 20:40:16 +00:00
audioconvert audioconvert: use the same biquad as filter-chain 2024-11-27 16:47:53 +01:00
audiomixer spa: use static inline for interfaces instead of macro 2024-11-26 11:35:49 +01:00
audiotestsrc spa: audiotestsrc: Validate loop and system before using them 2024-10-23 08:25:30 -04:00
avb json: add helper function to parse channel positions 2024-09-18 09:54:34 +02:00
bluez5 bluez5: improve decode-buffer latency accuracy 2024-12-01 23:05:27 +02:00
control control: add support for mixing to UMP 2024-07-29 18:15:58 +02:00
ffmpeg spa: use log topics everywhere 2024-03-11 18:45:21 +02:00
filter-graph filter-graph: use SPA_MAX instead of fmaxf 2024-12-04 16:40:53 +01:00
jack spa: use log topics everywhere 2024-03-11 18:45:21 +02:00
libcamera v4l2: use dll to track rate difference 2024-11-26 17:14:26 +01:00
support spa: serialize in_thread flushes with a mutex 2024-12-03 16:38:28 +01:00
test spa: use log topics everywhere 2024-03-11 18:45:21 +02:00
v4l2 spa: v4l2: query_ext_ctrl_ioctl(): only check errno on failure 2024-12-03 20:54:20 +01:00
videoconvert spa: use static inline for interfaces instead of macro 2024-11-26 11:35:49 +01:00
videotestsrc Port videotestsrc to LoopUtils 2024-07-01 15:28:14 +00:00
volume spa: fix volume plugin compilation 2024-06-18 15:44:26 +02:00
vulkan treewide: fix more -Wformat issues 2024-06-30 19:22:17 +00:00
meson.build filter-chain: move the filter-graph to plugins 2024-11-13 11:12:06 +01:00