If we are reversed, then we were correctly freeing both the list and the contained data. However, we were leaking a list in the case of a non-reversed traversal. Signed-off-by: Dan McGee <dan@archlinux.org> --- src/util/pactree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/util/pactree.c b/src/util/pactree.c index 0c1710f..9125f58 100644 --- a/src/util/pactree.c +++ b/src/util/pactree.c @@ -472,7 +472,7 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r depth->next = &d; /* last dep, cut off the limb here */ if(last){ - if(depth->prev){ + if(depth->prev) { depth->prev->next = &d; d.prev = depth->prev; depth = &d; @@ -488,6 +488,8 @@ static void walk_deps(alpm_list_t *dblist, alpm_pkg_t *pkg, tdepth *depth, int r if(rev) { FREELIST(deps); + } else { + alpm_list_free(deps); } } -- 1.8.0.2