From 4482a914f52311356f6f4b7a695d4075ca22c0c6 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Tue, 17 Nov 2020 16:53:38 +0800 Subject: [PATCH] internal/language: fix resizeRange index wrong way Fixes golang/go#42536 Change-Id: I572cdbb26d320c4d9a972d555ddc6427ce1f0348 Reviewed-on: https://go-review.googlesource.com/c/text/+/270697 Run-TryBot: Meng Zhuo TryBot-Result: Go Bot Reviewed-by: Marcel van Lohuizen Trust: Meng Zhuo --- internal/language/parse.go | 11 ++++++----- language/parse_test.go | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/internal/language/parse.go b/internal/language/parse.go index 2be83e1da..a2fdad89d 100644 --- a/internal/language/parse.go +++ b/internal/language/parse.go @@ -133,14 +133,15 @@ func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) { s.start = oldStart if end := oldStart + newSize; end != oldEnd { diff := end - oldEnd - if end < cap(s.b) { - b := make([]byte, len(s.b)+diff) + var b []byte + if n := len(s.b) + diff; n > cap(s.b) { + b = make([]byte, n) copy(b, s.b[:oldStart]) - copy(b[end:], s.b[oldEnd:]) - s.b = b } else { - s.b = append(s.b[end:], s.b[oldEnd:]...) + b = s.b[:n:n] } + copy(b[end:], s.b[oldEnd:]) + s.b = b s.next = end + (s.next - s.end) s.end = end } diff --git a/language/parse_test.go b/language/parse_test.go index 2ff28bfd3..041660c4e 100644 --- a/language/parse_test.go +++ b/language/parse_test.go @@ -318,6 +318,7 @@ func TestParseAcceptLanguage(t *testing.T) { {nil, "aa;q", false}, {nil, "aa;q=", false}, {nil, "aa;q=.", false}, + {nil, "00-t-0o", false}, // odd fallbacks {