Validate $ROOT inside the --resume merge list in order to avoid a pottential
authorZac Medico <zmedico@gentoo.org>
Sat, 6 Dec 2008 05:36:06 +0000 (05:36 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 6 Dec 2008 05:36:06 +0000 (05:36 -0000)
KeyError due to a stale merge list that was for a different $ROOT setting.
Thanks to Ned Ludd <solar@g.o> for reporting. (trunk r12166)

svn path=/main/branches/2.1.6/; revision=12167

pym/_emerge/__init__.py

index f6ef588b2f7fe1dff5b56f6a95f206e53f9e1d24..8126ae7b3094579d0cf8075319176324ebb2c81a 100644 (file)
@@ -12783,6 +12783,18 @@ def action_build(settings, trees, mtimedb,
                if not isinstance(mergelist, list):
                        del mtimedb[k]
                        continue
+               for x in mergelist:
+                       if not (isinstance(x, list) and len(x) == 4):
+                               continue
+                       pkg_type, pkg_root, pkg_key, pkg_action = x
+                       if pkg_root not in trees:
+                               # Current $ROOT setting differs,
+                               # so the list must be stale.
+                               mergelist = None
+                               break
+               if not mergelist:
+                       del mtimedb[k]
+                       continue
                resume_opts = resume_data.get("myopts")
                if not isinstance(resume_opts, (dict, list)):
                        del mtimedb[k]