int
_dbus_reader_count_array_elems (const DBusTypeReader *reader)
{
+/* To count the offsets we need to have offsets size and
+ * the start and end of the offsets. The start of the offsets
+ * is computed from the value of the last offset.
+ */
const char *buffer = _dbus_string_get_const_data (reader->value_str) + reader->value_start;
size_t container_size = reader->value_end - reader->value_start;
size_t offset_size = bus_gvariant_determine_word_size (container_size, 0);
- size_t last_offset = bus_gvariant_read_word_le (buffer + container_size - offset_size, offset_size);
+ size_t last_offset = container_size; /* this will give 0 if container is smaller than a single offset */
+ if (container_size > offset_size)
+ last_offset = bus_gvariant_read_word_le (buffer + container_size - offset_size, offset_size);
return (container_size - last_offset) / offset_size;
}