sbuf: linter fixes

This commit is contained in:
2025-11-15 19:53:18 -08:00
parent 3d9625b40b
commit fdff2e0afe
3 changed files with 34 additions and 35 deletions

View File

@@ -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.

View File

@@ -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
}

View File

@@ -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)
}