From 1d825017e4c6766fc5aee6520f6655333cf72d29 Mon Sep 17 00:00:00 2001 From: Adrian Szyndela Date: Fri, 7 Apr 2017 18:35:58 +0200 Subject: [PATCH] GVariant: don't remove padding from no field When a message is created with dbus_message_new() it gets no fields. Then, while appending some values, but before setting path, interface, etc. a single field appears - signature. If there would be more fields, then after deleting the last field we would need to remove padding from second-to-last field. In case of a single field, we have no second-to-last field, only empty dictionary. Empty dictionaries do not have padding at the end, so we do not need to remove it. Change-Id: Idb15f3999a3ff0117f906ec632f462eb5cdaab09 --- dbus/dbus-marshal-gvariant.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dbus/dbus-marshal-gvariant.c b/dbus/dbus-marshal-gvariant.c index 1348965..d6a3254 100644 --- a/dbus/dbus-marshal-gvariant.c +++ b/dbus/dbus-marshal-gvariant.c @@ -488,10 +488,12 @@ _dbus_header_gvariant_delete_field (DBusHeader *header, } n_fields_offsets--; - /* remove padding from now-last field */ - _dbus_string_shorten (&header->data, - _dbus_string_get_length(&header->data) - - (FIRST_GVARIANT_FIELD_OFFSET + fields_offsets[n_fields_offsets-1])); + /* remove padding from now-last field, if there is still any field */ + if (n_fields_offsets > 0) + _dbus_string_shorten (&header->data, + _dbus_string_get_length(&header->data) - + (FIRST_GVARIANT_FIELD_OFFSET + fields_offsets[n_fields_offsets-1])); + header->padding = 0; } } -- 2.7.4