diff -r bfe8ef6e370e -r 57b0c7221dba mercurial/encoding.py --- a/mercurial/encoding.py Sun Mar 25 16:47:33 2018 +0900 +++ b/mercurial/encoding.py Sun Apr 22 11:38:53 2018 +0900 @@ -504,11 +504,13 @@ internal surrogate encoding as a UTF-8 string.) ''' - if not isinstance(s, localstr) and isasciistr(s): + if isinstance(s, localstr): + # assume that the original UTF-8 sequence would never contain + # invalid characters in U+DCxx range + return s._utf8 + elif isasciistr(s): return s if "\xed" not in s: - if isinstance(s, localstr): - return s._utf8 try: s.decode('utf-8', _utf8strict) return s