Fix panic in EscapeReader (#18820) (#18821)

Backport #18820

There is a potential panic due to a mistaken resetting of the length parameter when
multibyte characters go over a read boundary.

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2022-02-19 15:34:32 +00:00 committed by GitHub
parent 458239b46d
commit fa9be55018
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 0 deletions

View file

@ -74,6 +74,7 @@ readingloop:
for err == nil { for err == nil {
n, err = text.Read(buf[readStart:]) n, err = text.Read(buf[readStart:])
bs := buf[:n+readStart] bs := buf[:n+readStart]
n = len(bs)
i := 0 i := 0
for i < len(bs) { for i < len(bs) {

View file

@ -200,3 +200,12 @@ func TestEscapeControlReader(t *testing.T) {
}) })
} }
} }
func TestEscapeControlReader_panic(t *testing.T) {
bs := make([]byte, 0, 20479)
bs = append(bs, 'A')
for i := 0; i < 6826; i++ {
bs = append(bs, []byte("—")...)
}
_, _ = EscapeControlBytes(bs)
}