diff options
author | Santiago M. Mola <santi@mola.io> | 2016-11-30 18:57:10 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2016-11-30 18:57:10 +0100 |
commit | 7de79aef5d4aa3100382d4df3e99525f9949e8d1 (patch) | |
tree | 2d218d1084d3badfd9acadfb41e61edff254428d /plumbing/protocol/packp | |
parent | bd3dd4d421299699854bfe0353aae312bcf8c97c (diff) | |
download | go-git-7de79aef5d4aa3100382d4df3e99525f9949e8d1.tar.gz |
capability: support empty input on Decode. (#153)
Calling capability.List's Decode with nil input will have no effect.
This is useful in other decoders, where an empty capability list is
received as an empty byte slice.
Diffstat (limited to 'plumbing/protocol/packp')
-rw-r--r-- | plumbing/protocol/packp/advrefs_decode.go | 4 | ||||
-rw-r--r-- | plumbing/protocol/packp/capability/list.go | 4 | ||||
-rw-r--r-- | plumbing/protocol/packp/capability/list_test.go | 7 | ||||
-rw-r--r-- | plumbing/protocol/packp/ulreq_decode.go | 4 |
4 files changed, 11 insertions, 8 deletions
diff --git a/plumbing/protocol/packp/advrefs_decode.go b/plumbing/protocol/packp/advrefs_decode.go index 696bbae..c8f8394 100644 --- a/plumbing/protocol/packp/advrefs_decode.go +++ b/plumbing/protocol/packp/advrefs_decode.go @@ -197,10 +197,6 @@ func decodeFirstRef(l *advRefsDecoder) decoderStateFn { } func decodeCaps(p *advRefsDecoder) decoderStateFn { - if len(p.line) == 0 { - return decodeOtherRefs - } - if err := p.data.Capabilities.Decode(p.line); err != nil { p.error("invalid capabilities: %s", err) } diff --git a/plumbing/protocol/packp/capability/list.go b/plumbing/protocol/packp/capability/list.go index 73d1f25..ff8d4a4 100644 --- a/plumbing/protocol/packp/capability/list.go +++ b/plumbing/protocol/packp/capability/list.go @@ -48,6 +48,10 @@ func (l *List) IsEmpty() bool { // Decode decodes list of capabilities from raw into the list func (l *List) Decode(raw []byte) error { + if len(raw) == 0 { + return nil + } + for _, data := range bytes.Split(raw, []byte{' '}) { pair := bytes.SplitN(data, []byte{'='}, 2) diff --git a/plumbing/protocol/packp/capability/list_test.go b/plumbing/protocol/packp/capability/list_test.go index 6d350b0..eeb3173 100644 --- a/plumbing/protocol/packp/capability/list_test.go +++ b/plumbing/protocol/packp/capability/list_test.go @@ -27,6 +27,13 @@ func (s *SuiteCapabilities) TestDecode(c *check.C) { c.Assert(cap.Get(ThinPack), check.IsNil) } +func (s *SuiteCapabilities) TestDecodeEmpty(c *check.C) { + cap := NewList() + err := cap.Decode(nil) + c.Assert(err, check.IsNil) + c.Assert(cap, check.DeepEquals, NewList()) +} + func (s *SuiteCapabilities) TestDecodeWithErrArguments(c *check.C) { cap := NewList() err := cap.Decode([]byte("thin-pack=foo")) diff --git a/plumbing/protocol/packp/ulreq_decode.go b/plumbing/protocol/packp/ulreq_decode.go index 812af5b..541a077 100644 --- a/plumbing/protocol/packp/ulreq_decode.go +++ b/plumbing/protocol/packp/ulreq_decode.go @@ -110,10 +110,6 @@ func (d *ulReqDecoder) readHash() (plumbing.Hash, bool) { // Expected format: sp cap1 sp cap2 sp cap3... func (d *ulReqDecoder) decodeCaps() stateFn { - if len(d.line) == 0 { - return d.decodeOtherWants - } - d.line = bytes.TrimPrefix(d.line, sp) if err := d.data.Capabilities.Decode(d.line); err != nil { d.error("invalid capabilities: %s", err) |