From 8faf55a8aec8f83e27a3254914772ca633480263 Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Tue, 30 Nov 2010 19:40:07 +0100 Subject: [PATCH] _unmerge_pkgfiles: improve out-of-prefix unmerging check Bug #345633 is likely caused by a corrupted/invalid CONTENTS entry (from previous buggy Portage releases). It shows, however, that the unmerge code wasn't protected well enough against "unmerging" files outside of the Prefix. All entries are evaluated now to see if they are within the Prefix and a warning is issued when they are not, preventing any further actions to be taken. --- pym/portage/dbapi/vartree.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 7e1068939..3837f3973 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1832,6 +1832,7 @@ class dblink(object): unmerge_desc["!mtime"] = _("!mtime") unmerge_desc["!obj"] = _("!obj") unmerge_desc["!sym"] = _("!sym") + unmerge_desc["!prefix"] = _("!prefix") real_root = self.settings['ROOT'] real_root_len = len(real_root) - 1 @@ -1860,6 +1861,11 @@ class dblink(object): os = portage.os perf_md5 = portage.checksum.perform_md5 + # don't try to unmerge the prefix offset itself + if len(obj) <= len(EPREFIX) or not obj.startswith(EPREFIX): + show_unmerge("---", unmerge_desc["!prefix"], file_type, obj) + continue + file_data = pkgfiles[objkey] file_type = file_data[0] statobj = None @@ -1984,9 +1990,6 @@ class dblink(object): mydirs.reverse() for obj in mydirs: - # don't try to unmerge the prefix offset itself - if len(obj) <= len(EPREFIX): - continue try: if bsd_chflags: lstatobj = os.lstat(obj) -- 2.26.2