From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 7F6BB1389E2 for ; Wed, 17 Dec 2014 17:59:35 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C2944E0880; Wed, 17 Dec 2014 17:59:33 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 4CFECE087E for ; Wed, 17 Dec 2014 17:59:33 +0000 (UTC) Received: from x51r2.gaikai.org (unknown [100.42.98.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: zmedico) by smtp.gentoo.org (Postfix) with ESMTPSA id 423B33404DA; Wed, 17 Dec 2014 17:59:32 +0000 (UTC) From: Zac Medico To: gentoo-portage-dev@lists.gentoo.org Cc: Zac Medico Subject: [gentoo-portage-dev] [PATCH v2] bintree.py: fix str() calls for Python 2 (532784) Date: Wed, 17 Dec 2014 09:59:22 -0800 Message-Id: <1418839162-23865-1-git-send-email-zmedico@gentoo.org> X-Mailer: git-send-email 2.0.4 In-Reply-To: <1418837765-22607-1-git-send-email-zmedico@gentoo.org> References: <1418837765-22607-1-git-send-email-zmedico@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org X-Archives-Salt: 30774bfc-e327-44be-a8a9-0ff99344ae73 X-Archives-Hash: a90f18ac66d21ddaebf634f5b4e64eaa Avoid a UnicodeDecodeError raised when str(e) converts an exception to bytes with Python 2. Since this file has unicode_literals enabled, use literal unicode format strings to format messages for unicode exceptions. However, with Python 2, an EnvironmentError exception may contain either bytes or unicode, so use _unicode(errors="replace") to ensure safety for EnvironmentError with all locales. Also, convert remaining str() calls to use _unicode() for uniform behavior regardless of python version. X-Gentoo-Bug: 532784 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=532784 --- PATCH v2 replaces the _unicode_decode call with _unicode(errors="replace"), which is required in order to force the EnvironmentError object to be converted to a unicode string. pym/portage/dbapi/bintree.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index d7c7f95..1156b66 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -391,7 +391,7 @@ class binarytree(object): # sanity check for atom in (origcp, newcp): if not isjustname(atom): - raise InvalidPackageName(str(atom)) + raise InvalidPackageName(_unicode(atom)) mynewcat = catsplit(newcp)[0] origmatches=self.dbapi.cp_list(origcp) moves = 0 @@ -803,8 +803,8 @@ class binarytree(object): d["CPV"] = mycpv d["SLOT"] = slot - d["MTIME"] = str(s[stat.ST_MTIME]) - d["SIZE"] = str(s.st_size) + d["MTIME"] = _unicode(s[stat.ST_MTIME]) + d["SIZE"] = _unicode(s.st_size) d.update(zip(self._pkgindex_aux_keys, self.dbapi.aux_get(mycpv, self._pkgindex_aux_keys))) @@ -1024,7 +1024,11 @@ class binarytree(object): except EnvironmentError as e: writemsg(_("\n\n!!! Error fetching binhost package" \ " info from '%s'\n") % _hide_url_passwd(base_url)) - writemsg("!!! %s\n\n" % str(e)) + # With Python 2, the EnvironmentError message may + # contain bytes or unicode, so use _unicode to ensure + # safety with all locales (bug #532784). + writemsg("!!! %s\n\n" % _unicode(e, + _encodings["stdio"], errors="replace")) del e pkgindex = None if proc is not None: @@ -1242,8 +1246,8 @@ class binarytree(object): d["CPV"] = cpv st = os.stat(pkg_path) - d["MTIME"] = str(st[stat.ST_MTIME]) - d["SIZE"] = str(st.st_size) + d["MTIME"] = _unicode(st[stat.ST_MTIME]) + d["SIZE"] = _unicode(st.st_size) rel_path = self._pkg_paths[cpv] # record location if it's non-default @@ -1270,7 +1274,7 @@ class binarytree(object): if profile_path.startswith(profiles_base): profile_path = profile_path[len(profiles_base):] header["PROFILE"] = profile_path - header["VERSION"] = str(self._pkgindex_version) + header["VERSION"] = _unicode(self._pkgindex_version) base_uri = self.settings.get("PORTAGE_BINHOST_HEADER_URI") if base_uri: header["URI"] = base_uri @@ -1316,8 +1320,7 @@ class binarytree(object): deps = use_reduce(deps, uselist=use, token_class=token_class) deps = paren_enclose(deps) except portage.exception.InvalidDependString as e: - writemsg("%s: %s\n" % (k, str(e)), - noiselevel=-1) + writemsg("%s: %s\n" % (k, e), noiselevel=-1) raise metadata[k] = deps -- 2.0.4