This patch fixes two related bugs:
1. off-by-one in checking size and alignment of the next element
in_dbus_reader_get_signature_fixed_size()
2. alignment requirements were not considered at all while iterating
over array of variable size elements in array_reader_next().
Change-Id: Ibd9e1f3d11fbcd3ef0e6dbaa024e66b2568709d5
res = update_size (res, res_recursive, ¤t_alignment, alignment_recursive);
/* and update position */
- *pos = recursive_pos - 1;
+ *pos = recursive_pos;
}
break;
case DBUS_TYPE_INVALID:
int size = _dbus_reader_get_type_fixed_size (reader, &alignment);
if (0 == size)
{
- /* variable size - use offsets*/
- reader->value_pos = _dbus_reader_get_offset_of_end_of_variable (reader);
+ /* variable size - use offsets - BUT consider also alignment,
+ because elements in the array might have alignment requirements.
+ */
+ reader->value_pos = _DBUS_ALIGN_VALUE(_dbus_reader_get_offset_of_end_of_variable (reader), alignment);
reader->variable_index++;
reader->finished = (reader->variable_index >= reader->n_offsets);
}