| author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-06-09 16:52:10 (GMT) |
|---|---|---|
| committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-06-10 17:09:41 (GMT) |
| commit | c3223ba6c401ba81df1305851312a47c485e6cd7 (patch) (side-by-side diff) | |
| tree | 93476987c2ef46d431a95f2dea5a351328e6f274 | |
| parent | 50732523a78254b28fad9427c91f774292de69cd (diff) | |
| download | dbus-c3223ba6.zip dbus-c3223ba6.tar.gz | |
_dbus_header_byteswap: change the first byte of the message, not just the struct member
This has been wrong approximately forever, for instance see:
http://lists.freedesktop.org/archives/dbus/2007-March/007357.html
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38120
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=629938
Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
| -rw-r--r-- | dbus/dbus-marshal-header.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/dbus/dbus-marshal-header.c b/dbus/dbus-marshal-header.c index 3f31d7a..a6c9b80 100644 --- a/dbus/dbus-marshal-header.c +++ b/dbus/dbus-marshal-header.c @@ -1468,14 +1468,20 @@ void _dbus_header_byteswap (DBusHeader *header, int new_order) { + unsigned char byte_order; + if (header->byte_order == new_order) return; + byte_order = _dbus_string_get_byte (&header->data, BYTE_ORDER_OFFSET); + _dbus_assert (header->byte_order == byte_order); + _dbus_marshal_byteswap (&_dbus_header_signature_str, 0, header->byte_order, new_order, &header->data, 0); + _dbus_string_set_byte (&header->data, BYTE_ORDER_OFFSET, new_order); header->byte_order = new_order; } |
