Skip to content

Commit 1a676ac

Browse files
authored
Fix readLengthEncodedString() returned []byte had wrong capacity (#766)
fixes #765
1 parent bcaf977 commit 1a676ac

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

driver_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,34 @@ func TestString(t *testing.T) {
499499
})
500500
}
501501

502+
func TestRawBytes(t *testing.T) {
503+
runTests(t, dsn, func(dbt *DBTest) {
504+
v1 := []byte("aaa")
505+
v2 := []byte("bbb")
506+
rows := dbt.mustQuery("SELECT ?, ?", v1, v2)
507+
if rows.Next() {
508+
var o1, o2 sql.RawBytes
509+
if err := rows.Scan(&o1, &o2); err != nil {
510+
dbt.Errorf("Got error: %v", err)
511+
}
512+
if !bytes.Equal(v1, o1) {
513+
dbt.Errorf("expected %v, got %v", v1, o1)
514+
}
515+
if !bytes.Equal(v2, o2) {
516+
dbt.Errorf("expected %v, got %v", v2, o2)
517+
}
518+
// https://github.com/go-sql-driver/mysql/issues/765
519+
// Appending to RawBytes shouldn't overwrite next RawBytes.
520+
o1 = append(o1, "xyzzy"...)
521+
if !bytes.Equal(v2, o2) {
522+
dbt.Errorf("expected %v, got %v", v2, o2)
523+
}
524+
} else {
525+
dbt.Errorf("no data")
526+
}
527+
})
528+
}
529+
502530
type testValuer struct {
503531
value string
504532
}

utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ func readLengthEncodedString(b []byte) ([]byte, bool, int, error) {
537537

538538
// Check data length
539539
if len(b) >= n {
540-
return b[n-int(num) : n], false, n, nil
540+
return b[n-int(num) : n : n], false, n, nil
541541
}
542542
return nil, false, n, io.EOF
543543
}

0 commit comments

Comments
 (0)