File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -645,6 +645,8 @@ def test_surrogatepass_handler(self):
645645 self .assertEqual (b"abc\xed \xa0 \x80 def" .decode ("utf-8" , "surrogatepass" ),
646646 "abc\ud800 def" )
647647 self .assertTrue (codecs .lookup_error ("surrogatepass" ))
648+ with self .assertRaises (UnicodeDecodeError ):
649+ b"abc\xed \xa0 " .decode ("utf-8" , "surrogatepass" )
648650
649651class UTF7Test (ReadTest ):
650652 encoding = "utf-7"
Original file line number Diff line number Diff line change @@ -821,9 +821,10 @@ PyCodec_SurrogatePassErrors(PyObject *exc)
821821 /* Try decoding a single surrogate character. If
822822 there are more, let the codec call us again. */
823823 p += start ;
824- if ((p [0 ] & 0xf0 ) == 0xe0 ||
825- (p [1 ] & 0xc0 ) == 0x80 ||
826- (p [2 ] & 0xc0 ) == 0x80 ) {
824+ if (strlen (p ) > 2 &&
825+ ((p [0 ] & 0xf0 ) == 0xe0 ||
826+ (p [1 ] & 0xc0 ) == 0x80 ||
827+ (p [2 ] & 0xc0 ) == 0x80 )) {
827828 /* it's a three-byte code */
828829 ch = ((p [0 ] & 0x0f ) << 12 ) + ((p [1 ] & 0x3f ) << 6 ) + (p [2 ] & 0x3f );
829830 if (ch < 0xd800 || ch > 0xdfff )
You can’t perform that action at this time.
0 commit comments