GVariant: don't remove padding from no field 37/123937/1 accepted/tizen/unified/20170410.155846 submit/tizen/20170410.050637
authorAdrian Szyndela <adrian.s@samsung.com>
Fri, 7 Apr 2017 16:35:58 +0000 (18:35 +0200)
committerAdrian Szyndela <adrian.s@samsung.com>
Fri, 7 Apr 2017 16:39:57 +0000 (18:39 +0200)
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

index 1348965..d6a3254 100644 (file)
@@ -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;
     }
   }