Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 36c78b9

Browse files
authored
Merge pull request #314 from lupine/249-fix-bufio-buffer-full
plumbing: Use ReadBytes() rather than ReadSlice()
2 parents e190c37 + ce4ca45 commit 36c78b9

File tree

4 files changed

+36
-2
lines changed

4 files changed

+36
-2
lines changed

plumbing/object/commit.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func (c *Commit) Decode(o plumbing.EncodedObject) (err error) {
130130

131131
var message bool
132132
for {
133-
line, err := r.ReadSlice('\n')
133+
line, err := r.ReadBytes('\n')
134134
if err != nil && err != io.EOF {
135135
return err
136136
}

plumbing/object/commit_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package object
22

33
import (
44
"io"
5+
"strings"
56
"time"
67

78
"github.com/src-d/go-git-fixtures"
@@ -167,3 +168,19 @@ func (s *SuiteCommit) TestCommitIterNext(c *C) {
167168
c.Assert(err, Equals, io.EOF)
168169
c.Assert(commit, IsNil)
169170
}
171+
172+
func (s *SuiteCommit) TestLongCommitMessageSerialization(c *C) {
173+
encoded := &plumbing.MemoryObject{}
174+
decoded := &Commit{}
175+
commit := *s.Commit
176+
177+
longMessage := "my message: message\n\n" + strings.Repeat("test", 4096) + "\nOK"
178+
commit.Message = longMessage
179+
180+
err := commit.Encode(encoded)
181+
c.Assert(err, IsNil)
182+
183+
err = decoded.Decode(encoded)
184+
c.Assert(err, IsNil)
185+
c.Assert(decoded.Message, Equals, longMessage)
186+
}

plumbing/object/tag.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (t *Tag) Decode(o plumbing.EncodedObject) (err error) {
9090

9191
r := bufio.NewReader(reader)
9292
for {
93-
line, err := r.ReadSlice('\n')
93+
line, err := r.ReadBytes('\n')
9494
if err != nil && err != io.EOF {
9595
return err
9696
}

plumbing/object/tag_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package object
33
import (
44
"fmt"
55
"io"
6+
"strings"
67
"time"
78

89
"github.com/src-d/go-git-fixtures"
@@ -269,3 +270,19 @@ func (s *TagSuite) TestTagToTagString(c *C) {
269270
"\n"+
270271
"\n")
271272
}
273+
274+
func (s *TagSuite) TestLongTagNameSerialization(c *C) {
275+
encoded := &plumbing.MemoryObject{}
276+
decoded := &Tag{}
277+
tag := s.tag(c, plumbing.NewHash("b742a2a9fa0afcfa9a6fad080980fbc26b007c69"))
278+
279+
longName := "my tag: name " + strings.Repeat("test", 4096) + " OK"
280+
tag.Name = longName
281+
282+
err := tag.Encode(encoded)
283+
c.Assert(err, IsNil)
284+
285+
err = decoded.Decode(encoded)
286+
c.Assert(err, IsNil)
287+
c.Assert(decoded.Name, Equals, longName)
288+
}

0 commit comments

Comments
 (0)