Mercurial > hg
changeset 13248:00411a4fa1bb stable
url: fix UnicodeDecodeError on certificate verification error
SSLSocket.getpeercert() returns tuple containing unicode for 'subject'.
Since Mercurial does't support IDN at all, it just returns error for non-ascii
certname.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 08 Jan 2011 21:52:25 +0900 |
parents | a01c52b08c5f |
children | 75d0c38a0bca |
files | mercurial/url.py tests/test-url.py |
diffstat | 2 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/url.py Sat Jan 08 11:18:38 2011 +0100 +++ b/mercurial/url.py Sat Jan 08 21:52:25 2011 +0900 @@ -498,7 +498,11 @@ for s in cert.get('subject', []): key, value = s[0] if key == 'commonName': - certname = value.lower() + try: + # 'subject' entries are unicode + certname = value.lower().encode('ascii') + except UnicodeEncodeError: + return _('IDN in certificate not supported') if (certname == dnsname or '.' in dnsname and certname == '*.' + dnsname.split('.', 1)[1]): return None
--- a/tests/test-url.py Sat Jan 08 11:18:38 2011 +0100 +++ b/tests/test-url.py Sat Jan 08 21:52:25 2011 +0900 @@ -36,3 +36,7 @@ 'no commonName found in certificate') check(_verifycert(None, 'example.com'), 'no certificate received') + +# Unicode (IDN) certname isn't supported +check(_verifycert(cert(u'\u4f8b.jp'), 'example.jp'), + 'IDN in certificate not supported')