comparison mercurial/mail.py @ 39107:c2327bb3505d

mail: call s.decode('ascii') explicitly to see if s is an ascii bytes
author Yuya Nishihara <yuya@tcha.org>
date Sun, 12 Aug 2018 12:14:28 +0900
parents ebf54a34b7b7
children d2d89d31cbb5
comparison
equal deleted inserted replaced
39106:ebf54a34b7b7 39107:c2327bb3505d
310 def _addressencode(ui, name, addr, charsets=None): 310 def _addressencode(ui, name, addr, charsets=None):
311 assert isinstance(addr, bytes) 311 assert isinstance(addr, bytes)
312 name = headencode(ui, name, charsets) 312 name = headencode(ui, name, charsets)
313 try: 313 try:
314 acc, dom = addr.split('@') 314 acc, dom = addr.split('@')
315 acc = acc.encode('ascii') 315 acc.decode('ascii')
316 dom = dom.decode(encoding.encoding).encode('idna') 316 dom = dom.decode(encoding.encoding).encode('idna')
317 addr = '%s@%s' % (acc, dom) 317 addr = '%s@%s' % (acc, dom)
318 except UnicodeDecodeError: 318 except UnicodeDecodeError:
319 raise error.Abort(_('invalid email address: %s') % addr) 319 raise error.Abort(_('invalid email address: %s') % addr)
320 except ValueError: 320 except ValueError:
321 try: 321 try:
322 # too strict? 322 # too strict?
323 addr = addr.encode('ascii') 323 addr.decode('ascii')
324 except UnicodeDecodeError: 324 except UnicodeDecodeError:
325 raise error.Abort(_('invalid local address: %s') % addr) 325 raise error.Abort(_('invalid local address: %s') % addr)
326 return pycompat.bytesurl( 326 return pycompat.bytesurl(
327 email.utils.formataddr((name, encoding.strfromlocal(addr)))) 327 email.utils.formataddr((name, encoding.strfromlocal(addr))))
328 328