mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-25 08:57:14 -05:00
modules: clamp input offset and size
So that we don't cause memory errors with invalid input.
This commit is contained in:
parent
24ba3f4d92
commit
0f839c7b61
10 changed files with 96 additions and 61 deletions
|
|
@ -188,28 +188,32 @@ static void capture_process(void *d)
|
|||
pw_log_debug("out of playback buffers: %m");
|
||||
|
||||
if (in != NULL && out != NULL) {
|
||||
uint32_t size = 0;
|
||||
int32_t stride = 0;
|
||||
|
||||
for (i = 0; i < out->buffer->n_datas; i++) {
|
||||
struct spa_data *ds, *dd;
|
||||
uint32_t outsize = 0;
|
||||
int32_t stride = 0;
|
||||
|
||||
dd = &out->buffer->datas[i];
|
||||
|
||||
if (i < in->buffer->n_datas) {
|
||||
uint32_t offs, size;
|
||||
|
||||
ds = &in->buffer->datas[i];
|
||||
|
||||
memcpy(dd->data,
|
||||
SPA_PTROFF(ds->data, ds->chunk->offset, void),
|
||||
ds->chunk->size);
|
||||
offs = SPA_MIN(ds->chunk->offset, ds->maxsize);
|
||||
size = SPA_MIN(ds->chunk->size, ds->maxsize - offs);
|
||||
stride = SPA_MAX(stride, stride);
|
||||
|
||||
size = SPA_MAX(size, ds->chunk->size);
|
||||
stride = SPA_MAX(stride, ds->chunk->stride);
|
||||
memcpy(dd->data,
|
||||
SPA_PTROFF(ds->data, offs, void), size);
|
||||
|
||||
outsize = SPA_MAX(outsize, size);
|
||||
} else {
|
||||
memset(dd->data, 0, size);
|
||||
memset(dd->data, 0, outsize);
|
||||
}
|
||||
dd->chunk->offset = 0;
|
||||
dd->chunk->size = size;
|
||||
dd->chunk->size = outsize;
|
||||
dd->chunk->stride = stride;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue