Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 0 additions & 47 deletions .github/workflows/codeql.yml

This file was deleted.

4 changes: 2 additions & 2 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [1.22.x]
go-version: [1.24.0]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v2
Expand All @@ -41,7 +41,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
go-version: [1.21.x, 1.22.x]
go-version: 1.24.0
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module github.com/minio/sio

go 1.24

require (
golang.org/x/crypto v0.23.0
golang.org/x/sys v0.20.0
)

require golang.org/x/term v0.20.0

go 1.18
26 changes: 12 additions & 14 deletions reader-v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ type encReaderV10 struct {
src io.Reader

buffer packageV10
recycle func() // Returns the buffer to the pool
offset int
payloadSize int
stateErr error
Expand All @@ -36,19 +37,16 @@ func encryptReaderV10(src io.Reader, config *Config) (*encReaderV10, error) {
if err != nil {
return nil, err
}
buffer, recycle := getBuffer()
return &encReaderV10{
authEncV10: ae,
src: src,
buffer: packageBufferPool.Get().([]byte)[:maxPackageSize],
buffer: buffer,
recycle: recycle,
payloadSize: config.PayloadSize,
}, nil
}

func (r *encReaderV10) recycle() {
recyclePackageBufferPool(r.buffer)
r.buffer = nil
}

func (r *encReaderV10) Read(p []byte) (int, error) {
if r.stateErr != nil {
return 0, r.stateErr
Expand Down Expand Up @@ -99,6 +97,7 @@ type decReaderV10 struct {
src io.Reader

buffer packageV10
recycle func() // Returns the buffer to the pool
offset int
stateErr error
}
Expand All @@ -110,18 +109,15 @@ func decryptReaderV10(src io.Reader, config *Config) (*decReaderV10, error) {
if err != nil {
return nil, err
}
buffer, recycle := getBuffer()
return &decReaderV10{
authDecV10: ad,
src: src,
buffer: packageBufferPool.Get().([]byte)[:maxPackageSize],
buffer: buffer,
recycle: recycle,
}, nil
}

func (r *decReaderV10) recycle() {
recyclePackageBufferPool(r.buffer)
r.buffer = nil
}

func (r *decReaderV10) Read(p []byte) (n int, err error) {
if r.stateErr != nil {
return 0, r.stateErr
Expand Down Expand Up @@ -226,12 +222,14 @@ func (r *decReaderAtV10) ReadAt(p []byte, offset int64) (n int, err error) {
return 0, errUnexpectedSize
}

buffer := packageBufferPool.Get().([]byte)[:maxPackageSize]
defer recyclePackageBufferPool(buffer)
buffer, recycle := getBuffer()
defer recycle()

decReader := decReaderV10{
authDecV10: r.ad,
src: &sectionReader{r.src, t * maxPackageSize},
buffer: packageV10(buffer),
recycle: recycle,
offset: 0,
}
decReader.SeqNum = uint32(t)
Expand Down
52 changes: 27 additions & 25 deletions reader-v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,27 @@ type encReaderV20 struct {
src io.Reader

buffer packageV20
recycle func() // Returns the buffer to the pool
offset int
lastByte byte
stateErr error

firstRead bool
}

var packageBufferPool = sync.Pool{New: func() interface{} { return make([]byte, maxPackageSize) }}
var packageBufferPool = sync.Pool{
New: func() any {
b := make([]byte, maxPackageSize)
return &b
},
}

func recyclePackageBufferPool(b []byte) {
if cap(b) < maxPackageSize {
return
}
// Clear so we don't potentially leak info between callers
for i := range b {
b[i] = 0
}
packageBufferPool.Put(b)
func getBuffer() ([]byte, func()) {
p := packageBufferPool.Get().(*[]byte)
return *p, sync.OnceFunc(func() {
clear(*p) // Clear to avoid leaking data between callers
packageBufferPool.Put(p)
})
}

// encryptReaderV20 returns an io.Reader wrapping the given io.Reader.
Expand All @@ -52,19 +55,17 @@ func encryptReaderV20(src io.Reader, config *Config) (*encReaderV20, error) {
if err != nil {
return nil, err
}

buffer, recycle := getBuffer()
return &encReaderV20{
authEncV20: ae,
src: src,
buffer: packageBufferPool.Get().([]byte)[:maxPackageSize],
buffer: buffer,
recycle: recycle,
firstRead: true,
}, nil
}

func (r *encReaderV20) recycle() {
recyclePackageBufferPool(r.buffer)
r.buffer = nil
}

func (r *encReaderV20) Read(p []byte) (n int, err error) {
if r.stateErr != nil {
return 0, r.stateErr
Expand Down Expand Up @@ -146,6 +147,7 @@ type decReaderV20 struct {

stateErr error
buffer packageV20
recycle func()
offset int
}

Expand All @@ -156,18 +158,15 @@ func decryptReaderV20(src io.Reader, config *Config) (*decReaderV20, error) {
if err != nil {
return nil, err
}
buffer, recycle := getBuffer()
return &decReaderV20{
authDecV20: ad,
src: src,
buffer: packageBufferPool.Get().([]byte)[:maxPackageSize],
buffer: buffer,
recycle: recycle,
}, nil
}

func (r *decReaderV20) recycle() {
recyclePackageBufferPool(r.buffer)
r.buffer = nil
}

func (r *decReaderV20) Read(p []byte) (n int, err error) {
if r.stateErr != nil {
return 0, r.stateErr
Expand Down Expand Up @@ -296,13 +295,16 @@ func (r *decReaderAtV20) ReadAt(p []byte, offset int64) (n int, err error) {
t--
}

buffer, recycle := getBuffer()
defer recycle()

decReader := decReaderV20{
authDecV20: r.ad,
src: &sectionReader{r.src, t * maxPackageSize},
buffer: packageBufferPool.Get().([]byte)[:maxPackageSize],
buffer: buffer,
recycle: recycle,
offset: 0,
}
defer decReader.recycle()
decReader.SeqNum = uint32(t)
if k > 0 {
if _, err := io.CopyN(io.Discard, &decReader, k); err != nil {
Expand All @@ -312,7 +314,7 @@ func (r *decReaderAtV20) ReadAt(p []byte, offset int64) (n int, err error) {

for n < len(p) && err == nil {
var nn int
nn, err = (&decReader).Read(p[n:])
nn, err = decReader.Read(p[n:])
n += nn
}
if err == io.EOF && n == len(p) {
Expand Down
Loading