From 398d01b8a9a622c7fb48ef55c5171372dabf3916 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 30 Sep 2009 14:33:05 +0100 Subject: [PATCH] Fix emission of domain events messages The code which updated the message length after writing the payload wrote the updated length word in the wrong place since the XDR object was given a buffer pointing to the start of the header payload, rather than message start. * daemon/remote.c: Fix updating of event message length so that we actually send the payload, not just the header --- daemon/remote.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 5369d0a8ae..6a7790e712 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -4745,17 +4745,19 @@ remoteDispatchDomainEventSend (struct qemud_client *client, /* Serialise the return header and event. */ xdrmem_create (&xdr, - msg->buffer + msg->bufferOffset, - msg->bufferLength - msg->bufferOffset, + msg->buffer, + msg->bufferLength, XDR_ENCODE); - if (!xdr_remote_domain_event_msg(&xdr, data)) + /* Skip over the header we just wrote */ + if (xdr_setpos (&xdr, msg->bufferOffset) == 0) goto xdr_error; + if (!xdr_remote_domain_event_msg(&xdr, data)) + goto xdr_error; - /* Update length word */ - msg->bufferOffset += xdr_getpos (&xdr); - len = msg->bufferOffset; + /* Update length word to include payload*/ + len = msg->bufferOffset = xdr_getpos (&xdr); if (xdr_setpos (&xdr, 0) == 0) goto xdr_error; -- 2.47.2