On 03/09/16 19:26, Sergey Petrenko via pacman-dev wrote:
libalpm/remove.c:
in remove_notify_needed_optdepends():
char *optstring = alpm_dep_compute_string(optdep);
isn't freed after being used.
Ought to thank Valgrind for this one.
Thanks. We did not cover this path in our pactest suite. Adding this test: diff --git a/test/pacman/tests/TESTS b/test/pacman/tests/TESTS index bd5a0b6..2d87796 100644 --- a/test/pacman/tests/TESTS +++ b/test/pacman/tests/TESTS @@ -109,6 +109,7 @@ TESTS += test/pacman/tests/querycheck002.py TESTS += test/pacman/tests/querycheck_fast_file_type.py TESTS += test/pacman/tests/reason001.py TESTS += test/pacman/tests/remove-assumeinstalled.py +TESTS += test/pacman/tests/remove-optdepend-of-installed-package.py TESTS += test/pacman/tests/remove-recursive-cycle.py TESTS += test/pacman/tests/remove001.py TESTS += test/pacman/tests/remove002.py diff --git a/test/pacman/tests/remove-optdepend-of-installed-package.py b/test/pacman/tests/remove-optdepend-of-installed-package.py new file mode 100644 index 0000000..4973df5 --- /dev/null +++ b/test/pacman/tests/remove-optdepend-of-installed-package.py @@ -0,0 +1,15 @@ +self.description = "Remove packages which is an optdepend of another package" + +p1 = pmpkg("dep") +self.addpkg2db("local", p1) + +p2 = pmpkg("pkg") +p2.optdepends = ["dep: for foobar"] +self.addpkg2db("local", p2) + +self.args = "-R %s" % p1.name + +self.addrule("PACMAN_RETCODE=0") +self.addrule("!PKG_EXIST=%s" % p1.name) +self.addrule("PKG_EXIST=%s" % p2.name) +self.addrule("PACMAN_OUTPUT=%s optionally requires %s" % (p2.name, p1.name)) -- 2.9.3