Skip to content

Commit 5220b03

Browse files
committed
Fixed code and tests for bad utf-8.
1 parent 8f3a45f commit 5220b03

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

diffmatchpatch/dmp.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1434,7 +1434,13 @@ func (dmp *DiffMatchPatch) DiffFromDelta(text1, delta string) (diffs []Diff, err
14341434
case '+':
14351435
// decode would Diff all "+" to " "
14361436
param = strings.Replace(param, "+", "%2b", -1)
1437-
param, _ = url.QueryUnescape(param)
1437+
param, err = url.QueryUnescape(param)
1438+
if err != nil {
1439+
return nil, err
1440+
}
1441+
if !utf8.ValidString(param) {
1442+
return nil, fmt.Errorf("invalid UTF-8 token: %q", param)
1443+
}
14381444
diffs = append(diffs, Diff{DiffInsert, param})
14391445
case '=', '-':
14401446
n, err := strconv.ParseInt(param, 10, 0)

diffmatchpatch/dmp_test.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -732,13 +732,17 @@ func Test_diffDelta(t *testing.T) {
732732
t.Fatal("diff_fromDelta: Too short.")
733733
}
734734

735-
// Generates error (%c3%xy invalid Unicode).
736-
/*
737-
seq, err := dmp.DiffFromDelta("", "+%c3%xy")
738-
if err == nil {
739-
panic(1) //assert.Fail("diff_fromDelta: Invalid character.");
740-
}
741-
*/
735+
// Generates error (%xy invalid URL escape).
736+
_, err = dmp.DiffFromDelta("", "+%c3%xy")
737+
if err == nil {
738+
assert.Fail(t, "diff_fromDelta: expected Invalid URL escape.");
739+
}
740+
741+
// Generates error (invalid utf8).
742+
_, err = dmp.DiffFromDelta("", "+%c3xy")
743+
if err == nil {
744+
assert.Fail(t, "diff_fromDelta: expected Invalid utf8.");
745+
}
742746

743747
// Test deltas with special characters.
744748
diffs = []Diff{

0 commit comments

Comments
 (0)