summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-05-13 21:13:05 +0200
committerJo-Philipp Wich <jo@mein.io>2018-05-13 21:13:05 +0200
commit820621952d537c49deba470c6f61c40df93f4ba8 (patch)
tree884c6f3f782202600e1d0adb0e2b1ffc722bf2f3
parent10f787881da2dc6aac261a2ee3b5eedc0f8b5b54 (diff)
downloadrpcd-820621952d537c49deba470c6f61c40df93f4ba8.tar.gz
uci: fix memory leak in rpc_uci_replace_savedir()
The rpc_uci_replace_savedir() function did not take into account that libuci uci_set_savedir() does an additional implicit uci_strdup() of the directory path string when appending a new delta directory item. Due to this oversight, only the struct uci_element items got freed, but not the duplicated path string, leading to leaking memory when invoking the uci api with session id argument. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--uci.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/uci.c b/uci.c
index 17b4d89..a1b8311 100644
--- a/uci.c
+++ b/uci.c
@@ -212,8 +212,12 @@ rpc_uci_replace_savedir(const char *path)
{
struct uci_element *e, *tmp;
- uci_foreach_element_safe(&cursor->delta_path, tmp, e)
+ uci_foreach_element_safe(&cursor->delta_path, tmp, e) {
+ if (e->name)
+ free(e->name);
+
free(e);
+ }
cursor->delta_path.prev = &cursor->delta_path;
cursor->delta_path.next = &cursor->delta_path;