aboutsummaryrefslogtreecommitdiff
path: root/src/strings
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2022-06-22 20:57:50 -0700
committerJoseph Tsai <joetsai@digital-static.net>2022-08-08 20:44:51 +0000
commit9a4685f22036b4e2577bb79dbfabd7c4e48146e3 (patch)
tree835c8522189cbf231780f450fb7b9dbb7e3431dd /src/strings
parentced4d6fd2d415d43c0f26e01fe332e4afa80114a (diff)
downloadgo-9a4685f22036b4e2577bb79dbfabd7c4e48146e3.tar.gz
go-9a4685f22036b4e2577bb79dbfabd7c4e48146e3.zip
strings: avoid utf8.RuneError mangling in Split
Split should only split strings and not perform mangling of invalid UTF-8 into ut8.RuneError. The prior behavior is clearly a bug since mangling is not performed in all other situations (e.g., separator is non-empty). Fixes #53511 Change-Id: I112a2ef15ee46ddecda015ee14bca04cd76adfbf Reviewed-on: https://go-review.googlesource.com/c/go/+/413715 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/strings')
-rw-r--r--src/strings/strings.go7
-rw-r--r--src/strings/strings_test.go2
2 files changed, 4 insertions, 5 deletions
diff --git a/src/strings/strings.go b/src/strings/strings.go
index 1dc4238522..013d718426 100644
--- a/src/strings/strings.go
+++ b/src/strings/strings.go
@@ -15,7 +15,7 @@ import (
// explode splits s into a slice of UTF-8 strings,
// one string per Unicode character up to a maximum of n (n < 0 means no limit).
-// Invalid UTF-8 sequences become correct encodings of U+FFFD.
+// Invalid UTF-8 bytes are sliced individually.
func explode(s string, n int) []string {
l := utf8.RuneCountInString(s)
if n < 0 || n > l {
@@ -23,12 +23,9 @@ func explode(s string, n int) []string {
}
a := make([]string, n)
for i := 0; i < n-1; i++ {
- ch, size := utf8.DecodeRuneInString(s)
+ _, size := utf8.DecodeRuneInString(s)
a[i] = s[:size]
s = s[size:]
- if ch == utf8.RuneError {
- a[i] = string(utf8.RuneError)
- }
}
if n > 0 {
a[n-1] = s
diff --git a/src/strings/strings_test.go b/src/strings/strings_test.go
index 9e7fb85ddf..a1604c2c47 100644
--- a/src/strings/strings_test.go
+++ b/src/strings/strings_test.go
@@ -406,6 +406,8 @@ var splittests = []SplitTest{
{"1 2 3 4", " ", 3, []string{"1", "2", "3 4"}},
{"1 2", " ", 3, []string{"1", "2"}},
{"", "T", math.MaxInt / 4, []string{""}},
+ {"\xff-\xff", "", -1, []string{"\xff", "-", "\xff"}},
+ {"\xff-\xff", "-", -1, []string{"\xff", "\xff"}},
}
func TestSplit(t *testing.T) {