mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-15 17:41:25 +01:00
Ensure messages are locked while marshalling.
Locking a message has the side-effect of updating the message's length
header. Previously, if dbus_message_marshal() was called on an unlocked
message, it could yield an invalid message (as discovered by Ben
Schwartz in <http://bugs.freedesktop.org/show_bug.cgi?id=19723>).
(cherry picked from commit 9f825271f9)
This commit is contained in:
parent
f412447c95
commit
1c4e856396
1 changed files with 15 additions and 0 deletions
|
|
@ -4000,6 +4000,7 @@ dbus_message_marshal (DBusMessage *msg,
|
|||
int *len_p)
|
||||
{
|
||||
DBusString tmp;
|
||||
dbus_bool_t was_locked;
|
||||
|
||||
_dbus_return_val_if_fail (msg != NULL, FALSE);
|
||||
_dbus_return_val_if_fail (marshalled_data_p != NULL, FALSE);
|
||||
|
|
@ -4008,6 +4009,12 @@ dbus_message_marshal (DBusMessage *msg,
|
|||
if (!_dbus_string_init (&tmp))
|
||||
return FALSE;
|
||||
|
||||
/* Ensure the message is locked, to ensure the length header is filled in. */
|
||||
was_locked = msg->locked;
|
||||
|
||||
if (!was_locked)
|
||||
dbus_message_lock (msg);
|
||||
|
||||
if (!_dbus_string_copy (&(msg->header.data), 0, &tmp, 0))
|
||||
goto fail;
|
||||
|
||||
|
|
@ -4022,10 +4029,18 @@ dbus_message_marshal (DBusMessage *msg,
|
|||
goto fail;
|
||||
|
||||
_dbus_string_free (&tmp);
|
||||
|
||||
if (!was_locked)
|
||||
msg->locked = FALSE;
|
||||
|
||||
return TRUE;
|
||||
|
||||
fail:
|
||||
_dbus_string_free (&tmp);
|
||||
|
||||
if (!was_locked)
|
||||
msg->locked = FALSE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue