mirror of https://github.com/golang/go.git
[release-branch.go1.2] strings: fix Replacer bug with prefix matches
««« CL 16880043 / 0eb6508d3e88 strings: fix Replacer bug with prefix matches singleStringReplacer had a bug where if a string was replaced at the beginning and no output had yet been produced into the temp buffer before matching ended, an invalid nil check (used as a proxy for having matched anything) meant it always returned its input. Fixes #6659 R=golang-dev, r CC=golang-dev https://golang.org/cl/16880043 »»» R=golang-dev CC=golang-dev https://golang.org/cl/20570044
This commit is contained in:
parent
7191e08599
commit
efb3af3d5c
|
|
@ -364,17 +364,18 @@ func makeSingleStringReplacer(pattern string, value string) *singleStringReplace
|
|||
|
||||
func (r *singleStringReplacer) Replace(s string) string {
|
||||
var buf []byte
|
||||
i := 0
|
||||
i, matched := 0, false
|
||||
for {
|
||||
match := r.finder.next(s[i:])
|
||||
if match == -1 {
|
||||
break
|
||||
}
|
||||
matched = true
|
||||
buf = append(buf, s[i:i+match]...)
|
||||
buf = append(buf, r.value...)
|
||||
i += match + len(r.finder.pattern)
|
||||
}
|
||||
if buf == nil {
|
||||
if !matched {
|
||||
return s
|
||||
}
|
||||
buf = append(buf, s[i:]...)
|
||||
|
|
|
|||
|
|
@ -261,10 +261,21 @@ func TestReplacer(t *testing.T) {
|
|||
testCases = append(testCases,
|
||||
testCase{abcMatcher, "", ""},
|
||||
testCase{abcMatcher, "ab", "ab"},
|
||||
testCase{abcMatcher, "abc", "[match]"},
|
||||
testCase{abcMatcher, "abcd", "[match]d"},
|
||||
testCase{abcMatcher, "cabcabcdabca", "c[match][match]d[match]a"},
|
||||
)
|
||||
|
||||
// Issue 6659 cases (more single string replacer)
|
||||
|
||||
noHello := NewReplacer("Hello", "")
|
||||
testCases = append(testCases,
|
||||
testCase{noHello, "Hello", ""},
|
||||
testCase{noHello, "Hellox", "x"},
|
||||
testCase{noHello, "xHello", "x"},
|
||||
testCase{noHello, "xHellox", "xx"},
|
||||
)
|
||||
|
||||
// No-arg test cases.
|
||||
|
||||
nop := NewReplacer()
|
||||
|
|
|
|||
Loading…
Reference in New Issue