diff --git a/src/pipewire/filter.c b/src/pipewire/filter.c index 872458284..fa5846a1c 100644 --- a/src/pipewire/filter.c +++ b/src/pipewire/filter.c @@ -969,6 +969,8 @@ static int impl_port_reuse_buffer(void *object, uint32_t port_id, uint32_t buffe if ((port = get_port(impl, SPA_DIRECTION_OUTPUT, port_id)) == NULL) return -EINVAL; + if (buffer_id >= port->n_buffers) + return -EINVAL; pw_log_trace("%p: recycle buffer %d", impl, buffer_id); push_queue(port, &port->queued, &port->buffers[buffer_id]); diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 36b63c000..a4f96cff2 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -1082,6 +1082,8 @@ static int impl_port_use_buffers(void *object, static int impl_port_reuse_buffer(void *object, uint32_t port_id, uint32_t buffer_id) { struct stream *d = object; + if (buffer_id >= d->n_buffers) + return -EINVAL; pw_log_trace("%p: recycle buffer %d", d, buffer_id); queue_push(d, &d->queued, &d->buffers[buffer_id]); return 0;