From bc1192c8dd057c3bdea9b56897eed2f5148cf811 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 21 Oct 2020 12:00:25 +0200 Subject: [PATCH] pulse-server: handle message errors --- src/modules/module-protocol-pulse/message.c | 6 ++++++ src/modules/module-protocol-pulse/pulse-server.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) 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)