pod: use _deref and _frame in safe place

In the filter, don't _deref or use _frame before we are going to add
more pods to the builder. If we are using a dynamic builder, the
dereffed pod might become invalid when the memory is reallocated.

Instead, take the offset of the frame and deref later when we are not
going to add more things.
This commit is contained in:
Wim Taymans 2025-07-22 10:06:07 +02:00
parent ff7fb675f1
commit ed7398a64a
2 changed files with 16 additions and 9 deletions

View file

@ -93,7 +93,7 @@ SPA_API_POD_BUILDER void spa_pod_builder_init(struct spa_pod_builder *builder, v
}
SPA_API_POD_BUILDER struct spa_pod *
spa_pod_builder_deref(struct spa_pod_builder *builder, uint32_t offset)
spa_pod_builder_deref_fallback(struct spa_pod_builder *builder, uint32_t offset, struct spa_pod *fallback)
{
uint32_t size = builder->size;
if (offset + UINT64_C(8) <= size) {
@ -102,7 +102,13 @@ spa_pod_builder_deref(struct spa_pod_builder *builder, uint32_t offset)
SPA_POD_IS_VALID(pod))
return pod;
}
return NULL;
return fallback;
}
SPA_API_POD_BUILDER struct spa_pod *
spa_pod_builder_deref(struct spa_pod_builder *builder, uint32_t offset)
{
return (struct spa_pod*)spa_pod_builder_deref_fallback(builder, offset, NULL);
}
SPA_API_POD_BUILDER struct spa_pod *