diff --git a/src/modules/module-protocol-pulse/message.c b/src/modules/module-protocol-pulse/message.c index dacc1e09d..db0538dcd 100644 --- a/src/modules/module-protocol-pulse/message.c +++ b/src/modules/module-protocol-pulse/message.c @@ -135,6 +135,7 @@ static int read_props(struct message *m, struct pw_properties *props) char *key; void *data; uint32_t length; + size_t size; if ((res = message_get(m, TAG_STRING, &key, @@ -152,28 +153,27 @@ static int read_props(struct message *m, struct pw_properties *props) return -EINVAL; if ((res = message_get(m, - TAG_ARBITRARY, &data, length, + TAG_ARBITRARY, &data, &size, TAG_INVALID)) < 0) return res; - pw_log_debug("%s %s", key, (char*)data); pw_properties_set(props, key, data); } return 0; } -static int read_arbitrary(struct message *m, const void **val, size_t length) +static int read_arbitrary(struct message *m, const void **val, size_t *length) { uint32_t len; int res; if ((res = read_u32(m, &len)) < 0) return res; - if (len != length) - return -EINVAL; - if (m->offset + length > m->length) + if (m->offset + len > m->length) return -ENOSPC; *val = m->data + m->offset; - m->offset += length; + m->offset += len; + if (length) + *length = len; return 0; } @@ -325,7 +325,7 @@ static int message_get(struct message *m, ...) case TAG_ARBITRARY: { const void **val = va_arg(va, const void**); - size_t len = va_arg(va, size_t); + size_t *len = va_arg(va, size_t*); if (dtag != tag) return -EINVAL; if ((res = read_arbitrary(m, val, len)) < 0) diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 218fb35c6..d50c617aa 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -449,15 +449,18 @@ static int do_command_auth(struct client *client, uint32_t command, uint32_t tag struct message *reply; uint32_t version; const void *cookie; + size_t len; if (message_get(m, TAG_U32, &version, - TAG_ARBITRARY, &cookie, NATIVE_COOKIE_LENGTH, + TAG_ARBITRARY, &cookie, &len, TAG_INVALID) < 0) { return -EPROTO; } if (version < 8) return -EPROTO; + if (len != NATIVE_COOKIE_LENGTH) + return -EINVAL; if ((version & PROTOCOL_VERSION_MASK) >= 13) version &= PROTOCOL_VERSION_MASK;