diff --git a/src/modules/module-protocol-pulse/message.c b/src/modules/module-protocol-pulse/message.c index 48327e181..f539e2944 100644 --- a/src/modules/module-protocol-pulse/message.c +++ b/src/modules/module-protocol-pulse/message.c @@ -500,6 +500,9 @@ static int message_put(struct message *m, ...) { va_list va; + if (m == NULL) + return -EINVAL; + va_start(va, m); while (true) { @@ -557,5 +560,8 @@ static int message_put(struct message *m, ...) } va_end(va); + if (m->length > m->allocated) + return -ENOMEM; + return 0; } diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 486034037..e8639db8b 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -272,6 +272,17 @@ static int send_message(struct client *client, struct message *m) struct impl *impl = client->impl; int res; + if (m == NULL) + return -EINVAL; + + if (m->length == 0) { + res = 0; + goto error; + } else if (m->length > m->allocated) { + res = -ENOMEM; + goto error; + } + m->offset = 0; spa_list_append(&client->out_messages, &m->link); res = flush_messages(client); @@ -282,6 +293,10 @@ static int send_message(struct client *client, struct message *m) res = 0; } return res; +error: + if (m) + message_free(client, m, false, false); + return res; } static struct message *reply_new(struct client *client, uint32_t tag)