Skip to content

Commit 1208045

Browse files
committed
test/fix: Read() may not always fill up buf
1 parent 473330a commit 1208045

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

xxd.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func XXD(r io.Reader, w io.Writer) error {
3737
r = bufio.NewReader(r)
3838
buf := make([]byte, 16)
3939
for {
40-
n, err := r.Read(buf)
40+
n, err := io.ReadFull(r, buf)
4141
if n == 0 || err == io.EOF {
4242
break
4343
}

xxd_test.go

+21-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestXXD(t *testing.T) {
2828
size := n % uint64(len(data))
2929
fmt.Printf("%d\n", size)
3030
var out bytes.Buffer
31-
if err := fn(bytes.NewBuffer(data[0:size]), &out); err != nil {
31+
if err := fn(&pathologicalReader{data[0:size]}, &out); err != nil {
3232
return []string{err.Error()}
3333
}
3434
return strings.Split(out.String(), "\n")
@@ -48,6 +48,26 @@ func TestXXD(t *testing.T) {
4848
}
4949
}
5050

51+
type pathologicalReader struct {
52+
data []byte
53+
}
54+
55+
func (p *pathologicalReader) Read(b []byte) (int, error) {
56+
n := len(b)
57+
if n > len(p.data) {
58+
n = len(p.data)
59+
}
60+
if n > 1 {
61+
n--
62+
}
63+
copy(b, p.data[0:n])
64+
p.data = p.data[n:]
65+
if len(p.data) == 0 {
66+
return n, io.EOF
67+
}
68+
return n, nil
69+
}
70+
5171
func BenchmarkXXD(b *testing.B) {
5272
b.StopTimer()
5373
data := make([]byte, b.N)

0 commit comments

Comments
 (0)