From b1487ac5dfe57cb16ec4575b7a2a8ac570fc2bc0 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 23 Feb 2009 03:12:49 +0000 Subject: When encoding strings inside vardbapi._counter_hash() and 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index db05fca6b..c13af9263 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -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) -- cgit v1.2.3-1-g7c22