From cefaa921a68c017910a804c6f889f6f19fc6e8b9 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 28 Jan 2013 13:18:00 -0800 Subject: [PATCH] removeFromContents: avoid KeyError, bug #454400 It's possible for two different paths to refer to the same contents_key, due to directory symlinks. This could happen if a directory was changed to a symlink after a package was merged, either by the user or by a pkg_* phase from some random ebuild. --- pym/portage/dbapi/vartree.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index bbcf61c9f..a2fbf86df 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1002,7 +1002,11 @@ class vardbapi(dbapi): relative_filename = filename[root_len:] contents_key = pkg._match_contents(relative_filename) if contents_key: - del new_contents[contents_key] + # It's possible for two different paths to refer to the same + # contents_key, due to directory symlinks. Therefore, pass a + # default value to pop, in order to avoid a KeyError which + # could otherwise be triggered (see bug #454400). + new_contents.pop(contents_key, None) removed += 1 if removed: -- 2.26.2