Add some sanity checks and error tolerance in the owners cache.
authorZac Medico <zmedico@gentoo.org>
Tue, 10 Jun 2008 03:33:13 +0000 (03:33 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 10 Jun 2008 03:33:13 +0000 (03:33 -0000)
(trunk r10633)

svn path=/main/branches/2.1.2/; revision=10634

pym/portage.py

index 045fa1eaa57f880467add02e6c4283bef7df8e9b..3d65c13417f9f39b129542e3235c7971541d8268 100644 (file)
@@ -7099,6 +7099,8 @@ class vardbapi(dbapi):
                                owners = None
                        elif "base_names" not in owners:
                                owners = None
+                       elif not isinstance(owners["base_names"], dict):
+                               owners = None
 
                if owners is None:
                        owners = {
@@ -7465,8 +7467,20 @@ class vardbapi(dbapi):
                                pkgs = base_names.get(name_hash)
                                if pkgs is not None:
                                        for hash_value in pkgs:
+                                               try:
+                                                       if len(hash_value) != 3:
+                                                               continue
+                                               except TypeError:
+                                                       continue
                                                cpv, counter, mtime = hash_value
-                                               if hash_pkg(cpv) != hash_value:
+                                               if not isinstance(cpv, basestring):
+                                                       continue
+                                               try:
+                                                       current_hash = hash_pkg(cpv)
+                                               except KeyError:
+                                                       continue
+
+                                               if current_hash != hash_value:
                                                        continue
                                                if dblink(cpv).isowner(path, root):
                                                        yield dblink(cpv), path