When _unicode_func_wrapper() decodes a string in a returned list (typically
authorZac Medico <zmedico@gentoo.org>
Mon, 17 Aug 2009 00:25:58 +0000 (00:25 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 17 Aug 2009 00:25:58 +0000 (00:25 -0000)
from os.listdir), discard values with invalid encoding. This insures that
all names returned from all os.listdir() calls are valid.

svn path=/main/trunk/; revision=14073

pym/portage/__init__.py

index 4815cc0747f478f94d1edda6588d0906c60a30ee..0ecb6085ad839b6bf3fa90f473dae4d984cad8de 100644 (file)
@@ -168,11 +168,20 @@ class _unicode_func_wrapper(object):
                if isinstance(rval, (basestring, list, tuple)):
                        if isinstance(rval, basestring):
                                rval = _unicode_decode(rval, encoding=encoding)
-                       elif isinstance(rval, list):
-                               rval = [_unicode_decode(x, encoding=encoding) for x in rval]
-                       elif isinstance(rval, tuple):
-                               rval = tuple(_unicode_decode(x, encoding=encoding) \
-                                       for x in rval)
+                       else:
+                               decoded_rval = []
+                               for x in rval:
+                                       try:
+                                               x = _unicode_decode(x, encoding=encoding, errors='strict')
+                                       except UnicodeDecodeError:
+                                               pass
+                                       else:
+                                               decoded_rval.append(x)
+
+                               if isinstance(rval, tuple):
+                                       rval = tuple(decoded_rval)
+                               else:
+                                       rval = decoded_rval
 
                return rval