From: Tim Cooper Date: Tue, 17 Apr 2018 19:55:42 +0000 (-0300) Subject: encoding/hex: fix Dumper not always closing on Close call X-Git-Tag: go1.11beta1~785 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9db1dd074df62d18f6902f06c93c72da0a3ffd16;p=gostls13.git encoding/hex: fix Dumper not always closing on Close call Updates #23574 Change-Id: I1b87390679e0817a2f6e4e5938994ea32df87bd7 Reviewed-on: https://go-review.googlesource.com/107596 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/encoding/hex/hex.go b/src/encoding/hex/hex.go index edc53954a1..4cb26b6673 100644 --- a/src/encoding/hex/hex.go +++ b/src/encoding/hex/hex.go @@ -282,10 +282,13 @@ func (h *dumper) Write(data []byte) (n int, err error) { func (h *dumper) Close() (err error) { // See the comments in Write() for the details of this format. - if h.used == 0 || h.closed { + if h.closed { return } h.closed = true + if h.used == 0 { + return + } h.buf[0] = ' ' h.buf[1] = ' ' h.buf[2] = ' ' diff --git a/src/encoding/hex/hex_test.go b/src/encoding/hex/hex_test.go index f222316649..6ba054ef9a 100644 --- a/src/encoding/hex/hex_test.go +++ b/src/encoding/hex/hex_test.go @@ -204,6 +204,19 @@ func TestDumper_doubleclose(t *testing.T) { } } +func TestDumper_earlyclose(t *testing.T) { + var out bytes.Buffer + dumper := Dumper(&out) + + dumper.Close() + dumper.Write([]byte(`gopher`)) + + expected := "" + if out.String() != expected { + t.Fatalf("got:\n%#v\nwant:\n%#v", out.String(), expected) + } +} + func TestDump(t *testing.T) { var in [40]byte for i := range in {