Statically assert that the DBusMessageIter struct has no padding
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 15 Feb 2016 13:52:52 +0000 (13:52 +0000)
committerSimon McVittie <smcv@debian.org>
Wed, 2 Mar 2016 18:17:57 +0000 (18:17 +0000)
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Thiago Macieira <thiago@kde.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=94136

dbus/dbus-message.c

index abdc11f..e22fe51 100644 (file)
@@ -2058,6 +2058,11 @@ _dbus_message_iter_init_common (DBusMessage         *message,
       sizeof (DBusMessageIter));
   _DBUS_STATIC_ASSERT (_DBUS_ALIGNOF (DBusMessageIter_1_10_0) ==
       _DBUS_ALIGNOF (DBusMessageIter));
+  /* If this static assertion fails, it means the DBusMessageIter struct
+   * is not "packed", which might result in "iter = other_iter" not copying
+   * every byte. */
+  _DBUS_STATIC_ASSERT (sizeof (DBusMessageIter) ==
+      4 * sizeof (void *) + sizeof (dbus_uint32_t) + 9 * sizeof (int));
 
   /* Since the iterator will read or write who-knows-what from the
    * message, we need to get in the right byte order