From: Jo-Philipp Wich Date: Sun, 13 May 2018 19:13:05 +0000 (+0200) Subject: uci: fix memory leak in rpc_uci_replace_savedir() X-Git-Url: http://git.archive.openwrt.org/?p=project%2Frpcd.git;a=commitdiff_plain;h=820621952d537c49deba470c6f61c40df93f4ba8 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 --- 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;