From bb2fdc70a61751d289f84b48dd016a68b045a50f Mon Sep 17 00:00:00 2001 From: Hanspeter Portner Date: Mon, 18 Jul 2016 19:35:19 +0200 Subject: Fix vector padding A Vector must be padded properly, or a Vector with, for example, an odd number of Int elements will cause the rest of the containing Atom to be invalid. --- src/sratom.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sratom.c b/src/sratom.c index 7966e65..9a55b25 100644 --- a/src/sratom.c +++ b/src/sratom.c @@ -709,8 +709,12 @@ read_node(Sratom* sratom, map->handle, (const char*)sord_node_get_string(child_type_node)); uint32_t child_size = atom_size(sratom, child_type); if (child_size > 0) { - lv2_atom_forge_vector_head(forge, &frame, child_size, child_type); + LV2_Atom_Forge_Ref ref = lv2_atom_forge_vector_head( + forge, &frame, child_size, child_type); read_list_value(sratom, forge, world, model, value, MODE_BODY); + lv2_atom_forge_pop(forge, &frame); + frame.ref = 0; + lv2_atom_forge_pad(forge, lv2_atom_forge_deref(forge, ref)->size); } sord_node_free(world, child_type_node); } else if (value && sord_node_equals(sord_node_get_datatype(value), @@ -730,6 +734,7 @@ read_node(Sratom* sratom, lv2_atom_forge_object(forge, &frame, 0, type_urid); read_resource(sratom, forge, world, model, node, type_urid); } + if (frame.ref) { lv2_atom_forge_pop(forge, &frame); } -- cgit v1.2.1