From 276f5c49d55b5ff7694f2f35ae538282ec360e7d Mon Sep 17 00:00:00 2001 From: redshiftzero Date: Mon, 15 Apr 2019 22:46:57 -0700 Subject: 4810 bugfix: avoid UnicodeEncodeError on python 2 (#4846) * test: regression test for UnicodeEncodeError in x509 name in #4810 added utf8 encoding at the top of the file due to PEP 263 * bugfix: #4810 resolve UnicodeEncodeError in x509 name --- src/cryptography/x509/name.py | 5 ++++- tests/x509/test_x509.py | 23 +++++++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py index dac5639e..ca2a1754 100644 --- a/src/cryptography/x509/name.py +++ b/src/cryptography/x509/name.py @@ -253,4 +253,7 @@ class Name(object): return sum(len(rdn) for rdn in self._attributes) def __repr__(self): - return "".format(self.rfc4514_string()) + if six.PY2: + return "".format(self.rfc4514_string().encode('utf8')) + else: + return "".format(self.rfc4514_string()) diff --git a/tests/x509/test_x509.py b/tests/x509/test_x509.py index afca9c5b..a4cd70bc 100644 --- a/tests/x509/test_x509.py +++ b/tests/x509/test_x509.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # This file is dual licensed under the terms of the Apache License, Version # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. @@ -4128,13 +4129,27 @@ class TestName(object): name2 = x509.Name([x509.RelativeDistinguishedName([rdn1, rdn2])]) assert name2.rdns == [x509.RelativeDistinguishedName([rdn1, rdn2])] - def test_repr(self): + @pytest.mark.parametrize( + ("common_name", "org_name", "expected_repr"), + [ + ( + u'cryptography.io', + u'PyCA', + "", + ), + ( + u'Certificación', + u'Certificación', + "", + ), + ]) + def test_repr(self, common_name, org_name, expected_repr): name = x509.Name([ - x509.NameAttribute(NameOID.COMMON_NAME, u'cryptography.io'), - x509.NameAttribute(NameOID.ORGANIZATION_NAME, u'PyCA'), + x509.NameAttribute(NameOID.COMMON_NAME, common_name), + x509.NameAttribute(NameOID.ORGANIZATION_NAME, org_name), ]) - assert repr(name) == "" + assert repr(name) == expected_repr def test_rfc4514_string(self): n = x509.Name([ -- cgit v1.2.3