Add some sanity checks and error tolerance in the owners cache.
svn path=/main/trunk/; revision=10633
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 4c67dfa..190157b 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -619,6 +619,8 @@
owners = None
elif "base_names" not in owners:
owners = None
+ elif not isinstance(owners["base_names"], dict):
+ owners = None
if owners is None:
owners = {
@@ -994,8 +996,20 @@
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