diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mds-server/multicast.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/mds-server/multicast.c b/src/mds-server/multicast.c index 21c9e60..a901194 100644 --- a/src/mds-server/multicast.c +++ b/src/mds-server/multicast.c @@ -93,8 +93,11 @@ size_t multicast_marshal(const multicast_t* restrict this, char* restrict data) data += n / sizeof(char); rc += n; } - memcpy(data, this->message, this->message_length * sizeof(char)); - rc += this->message_length * sizeof(char); + if (this->message_length > 0) + { + memcpy(data, this->message, this->message_length * sizeof(char)); + rc += this->message_length * sizeof(char); + } return rc; } @@ -120,18 +123,22 @@ size_t multicast_unmarshal(multicast_t* restrict this, char* restrict data) buf_get_next(data, size_t, this->message_length); buf_get_next(data, size_t, this->message_ptr); buf_get_next(data, size_t, this->message_prefix); - if (xmalloc(this->interceptions, this->interceptions_count, queued_interception_t)) - return 0; + if (this->interceptions_count > 0) + if (xmalloc(this->interceptions, this->interceptions_count, queued_interception_t)) + return 0; for (i = 0; i < this->interceptions_count; i++) { n = queued_interception_unmarshal(this->interceptions + i, data); data += n / sizeof(char); rc += n; } - if (xmalloc(this->message, this->message_length, char)) - return 0; - memcpy(this->message, data, this->message_length * sizeof(char)); - rc += this->message_length * sizeof(char); + if (this->message_length > 0) + { + if (xmalloc(this->message, this->message_length, char)) + return 0; + memcpy(this->message, data, this->message_length * sizeof(char)); + rc += this->message_length * sizeof(char); + } return rc; } |