From fdff2e0afeddc4d69a1d91f8498e48c7ded6f661 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Sat, 15 Nov 2025 19:53:18 -0800 Subject: [PATCH] sbuf: linter fixes --- .golangci.yml | 2 ++ sbuf/sbuf.go | 21 +++++++++------------ sbuf/sbuf_test.go | 46 +++++++++++++++++++++++----------------------- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 7624945..2b51128 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -228,6 +228,8 @@ linters: # Such cases aren't reported by default. # Default: false check-type-assertions: true + exclude-functions: + - (*git.wntrmute.dev/kyle/goutils/sbuf.Buffer).Write exhaustive: # Program elements to check for exhaustiveness. diff --git a/sbuf/sbuf.go b/sbuf/sbuf.go index e50564f..50de929 100644 --- a/sbuf/sbuf.go +++ b/sbuf/sbuf.go @@ -15,7 +15,7 @@ func zero(in []byte, n int) { stop = len(in) } - for i := 0; i < stop; i++ { + for i := range stop { in[i] ^= in[i] } } @@ -37,7 +37,10 @@ func NewBuffer(n int) *Buffer { // original data will be wiped. func NewBufferFrom(p []byte) *Buffer { buf := NewBuffer(len(p)) - buf.Write(p) + _, err := buf.Write(p) + if err != nil { + return nil + } zero(p, len(p)) return buf } @@ -54,10 +57,7 @@ func (buf *Buffer) Read(p []byte) (int, error) { return 0, io.EOF } - copyLength := len(p) - if copyLength > len(buf.buf) { - copyLength = len(buf.buf) - } + copyLength := min(len(p), len(buf.buf)) copy(p, buf.buf) zero(buf.buf, len(p)) @@ -91,10 +91,7 @@ func (buf *Buffer) Write(p []byte) (int, error) { r := len(buf.buf) + len(p) if cap(buf.buf) < r { l := r - for { - if l > r { - break - } + for l <= r { l *= 2 } buf.grow(l - cap(buf.buf)) @@ -107,7 +104,7 @@ func (buf *Buffer) Write(p []byte) (int, error) { func (buf *Buffer) WriteByte(c byte) error { r := len(buf.buf) + 1 if cap(buf.buf) < r { - l := r * 2 + l := r << 1 buf.grow(l - cap(buf.buf)) } buf.buf = append(buf.buf, c) @@ -138,7 +135,7 @@ func (buf *Buffer) Bytes() []byte { } p := make([]byte, buf.Len()) - buf.Read(p) + _, _ = buf.Read(p) buf.Close() return p } diff --git a/sbuf/sbuf_test.go b/sbuf/sbuf_test.go index 1e5c339..50e6da0 100644 --- a/sbuf/sbuf_test.go +++ b/sbuf/sbuf_test.go @@ -1,15 +1,16 @@ -package sbuf +package sbuf_test import ( "bytes" "crypto/rand" "testing" + "git.wntrmute.dev/kyle/goutils/sbuf" "golang.org/x/crypto/nacl/box" ) var ( - buf = &Buffer{} + buf = &sbuf.Buffer{} testMessage1 = []byte("round and round and round we go, where we stop, no one knows") testMessage2 = []byte("the deconstruction of falling stars") ) @@ -113,23 +114,23 @@ func TestShortRead(t *testing.T) { } func TestNewBuffer(t *testing.T) { - buf := NewBuffer(32) - if len(buf.buf) != 0 { + testBuffer := sbuf.NewBuffer(32) + if testBuffer.Len() != 0 { t.Fatalf("expected new buffer length to be 0, have %d", - len(buf.buf)) + testBuffer.Len()) } - if cap(buf.buf) != 32 { + if testBuffer.Cap() != 32 { t.Fatalf("expected new buffer capacity to be 0, have %d", - cap(buf.buf)) + testBuffer.Cap()) } } func TestNewBufferFrom(t *testing.T) { p := make([]byte, len(testMessage1)) copy(p, testMessage1) - buf := NewBufferFrom(p) - if !bytes.Equal(buf.buf, testMessage1) { + testBuffer := sbuf.NewBufferFrom(p) + if !bytes.Equal(testBuffer.Bytes(), testMessage1) { t.Fatal("new buffer wasn't constructed properly") } } @@ -137,10 +138,10 @@ func TestNewBufferFrom(t *testing.T) { func TestBytes(t *testing.T) { p := make([]byte, len(testMessage1)) copy(p, testMessage1) - buf := NewBufferFrom(p) + testBuffer := sbuf.NewBufferFrom(p) - out := buf.Bytes() - if buf.buf != nil { + out := testBuffer.Bytes() + if testBuffer.Len() != 0 { t.Fatal("buffer was not closed") } @@ -148,21 +149,21 @@ func TestBytes(t *testing.T) { t.Fatal("buffer did not return the right data") } - out = buf.Bytes() + out = testBuffer.Bytes() if out != nil { t.Fatal("a closed buffer should return nil for Bytes") } } func TestRWByte(t *testing.T) { - buf := NewBuffer(0) + testBuffer := sbuf.NewBuffer(0) c := byte(42) - err := buf.WriteByte(c) + err := testBuffer.WriteByte(c) if err != nil { t.Fatalf("%v", err) } - c, err = buf.ReadByte() + c, err = testBuffer.ReadByte() if err != nil { t.Fatalf("%v", err) } @@ -171,22 +172,21 @@ func TestRWByte(t *testing.T) { t.Fatalf("Expected 42, have %d", c) } - _, err = buf.ReadByte() + _, err = testBuffer.ReadByte() if err == nil { t.Fatal("Expected EOF") } } func BenchmarkRead(b *testing.B) { - b.N = 2000 pub, priv, err := box.GenerateKey(rand.Reader) if err != nil { b.Fatalf("%v", err) } b.ReportAllocs() - for i := 0; i < b.N; i++ { - _, err := buf.Write(priv[:]) + for b.Loop() { + _, err = buf.Write(priv[:]) if err != nil { b.Fatalf("%v", err) } @@ -204,11 +204,11 @@ func BenchmarkFixed(b *testing.B) { b.Fatalf("%v", err) } - buf = NewBuffer(64 * b.N) + buf = sbuf.NewBuffer(64 * b.N) b.ReportAllocs() - for i := 0; i < b.N; i++ { - _, err := buf.Write(priv[:]) + for b.Loop() { + _, err = buf.Write(priv[:]) if err != nil { b.Fatalf("%v", err) }