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