When encoding strings inside vardbapi._counter_hash() and
authorZac Medico <zmedico@gentoo.org>
Mon, 23 Feb 2009 03:12:49 +0000 (03:12 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 23 Feb 2009 03:12:49 +0000 (03:12 -0000)
vardbapi._owners_cache._hash_str(), use 'backslashreplace' in order to avoid
potential UnicodeError exceptions. Use constant ascii and utf_8 codecs,
respectively, since these codecs are guaranteed to be available by
_ensure_default_encoding().

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

pym/portage/dbapi/vartree.py

index db05fca6bee256aa7387e41206a217d126ab8777..c13af9263ba4c8132c5f1680d342d3f1f36bd46e 100644 (file)
@@ -792,7 +792,7 @@ class vardbapi(dbapi):
                                counter, = self.aux_get(cpv, aux_keys)
                        except KeyError:
                                continue
-                       h.update(counter.encode())
+                       h.update(counter.encode('ascii', 'backslashreplace'))
                return h.hexdigest()
 
        def cpv_inject(self, mycpv):
@@ -1390,7 +1390,9 @@ class vardbapi(dbapi):
 
                def _hash_str(self, s):
                        h = self._new_hash()
-                       h.update(s.encode())
+                       # Always use a constant utf_8 encoding here, since
+                       # the "default" encoding can change.
+                       h.update(s.encode('utf_8', 'backslashreplace'))
                        h = h.hexdigest()
                        h = h[-self._hex_chars:]
                        h = int(h, 16)