From c04580a2567706e3feb50671b68e3b3699e10c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Barnab=C3=A1s=20P=C5=91cze?= Date: Wed, 29 Dec 2021 14:58:39 +0100 Subject: [PATCH] pulse-server: module-roc-{sink,source}: fix potential memory leaks Two `pw_properties` objects are not freed in the error path. Resolves Coverity issues: 1468665, 1468666, 1468667, 1468668. Furthermore, the module argument string is also not freed. --- src/modules/module-protocol-pulse/modules/module-roc-sink.c | 5 +++++ .../module-protocol-pulse/modules/module-roc-source.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/modules/module-protocol-pulse/modules/module-roc-sink.c b/src/modules/module-protocol-pulse/modules/module-roc-sink.c index c2abf7c9f..707dc8096 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-sink.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-sink.c @@ -91,6 +91,9 @@ static int module_roc_sink_load(struct client *client, struct module *module) data->mod = pw_context_load_module(module->impl->context, "libpipewire-module-roc-sink", args, NULL); + + free(args); + if (data->mod == NULL) return -errno; @@ -209,6 +212,8 @@ struct module *create_module_roc_sink(struct impl *impl, const char *argument) return module; out: pw_properties_free(props); + pw_properties_free(sink_props); + pw_properties_free(roc_props); errno = -res; return NULL; } diff --git a/src/modules/module-protocol-pulse/modules/module-roc-source.c b/src/modules/module-protocol-pulse/modules/module-roc-source.c index cd595e118..18b917c66 100644 --- a/src/modules/module-protocol-pulse/modules/module-roc-source.c +++ b/src/modules/module-protocol-pulse/modules/module-roc-source.c @@ -93,6 +93,9 @@ static int module_roc_source_load(struct client *client, struct module *module) data->mod = pw_context_load_module(module->impl->context, "libpipewire-module-roc-source", args, NULL); + + free(args); + if (data->mod == NULL) return -errno; @@ -218,6 +221,8 @@ struct module *create_module_roc_source(struct impl *impl, const char *argument) return module; out: pw_properties_free(props); + pw_properties_free(source_props); + pw_properties_free(roc_props); errno = -res; return NULL; }