mirror of
https://github.com/python/cpython.git
synced 2025-11-20 02:50:14 +00:00
Fix for #1444: utf_8_sig.StreamReader was (indirectly through decode())
calling codecs.utf_8_decode() with final==True, which falled with incomplete byte sequences. Fix and test by James G. Sack.
This commit is contained in:
parent
fc7e72d1c6
commit
183744d6b9
2 changed files with 55 additions and 5 deletions
|
|
@ -84,12 +84,18 @@ class StreamReader(codecs.StreamReader):
|
|||
pass
|
||||
|
||||
def decode(self, input, errors='strict'):
|
||||
if len(input) < 3 and codecs.BOM_UTF8.startswith(input):
|
||||
# not enough data to decide if this is a BOM
|
||||
# => try again on the next call
|
||||
return (u"", 0)
|
||||
if len(input) < 3:
|
||||
if codecs.BOM_UTF8.startswith(input):
|
||||
# not enough data to decide if this is a BOM
|
||||
# => try again on the next call
|
||||
return (u"", 0)
|
||||
elif input[:3] == codecs.BOM_UTF8:
|
||||
self.decode = codecs.utf_8_decode
|
||||
(output, consumed) = codecs.utf_8_decode(input[3:],errors)
|
||||
return (output, consumed+3)
|
||||
# (else) no BOM present
|
||||
self.decode = codecs.utf_8_decode
|
||||
return decode(input, errors)
|
||||
return codecs.utf_8_decode(input, errors)
|
||||
|
||||
### encodings module API
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue