Skip to content

Commit 6cf316e

Browse files
committed
fix: gosec uint32 linter issues
1 parent 811e3d1 commit 6cf316e

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

pkg/mbox/mailbox.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package mbox
33
import (
44
"errors"
55
"fmt"
6+
"math"
67
"os"
78
"unsafe"
89

@@ -189,8 +190,11 @@ func (m *Mailbox) Close() {
189190
// the next request is made.
190191
func (m *Mailbox) Do(tagID uint32, bufferBytes int, args ...uint32) ([]Tag, error) {
191192
m.alignBuffer()
193+
192194
bufferBytes = m.ensureBufferSize(bufferBytes, len(args))
193-
m.writeRequestHeader(bufferBytes, tagID, args)
195+
if err := m.writeRequestHeader(bufferBytes, tagID, args); err != nil {
196+
return nil, fmt.Errorf("unable to write request header: %w", err)
197+
}
194198

195199
debugf("TX:\n")
196200
m.debugBuffer(" %02d: 0x%08X\n", m.buf[:MailboxRequestHeaderWords+len(args)])
@@ -364,14 +368,27 @@ func (m *Mailbox) ensureBufferSize(bufferBytes, numArgs int) int {
364368
return bufferBytes
365369
}
366370

367-
// writeRequestHeader writes the message header and tag into the buffer.
368-
func (m *Mailbox) writeRequestHeader(bufferBytes int, tagID uint32, args []uint32) {
369-
m.buf[0] = uint32(len(m.buf)) * MailboxWordBytes
371+
// writeRequestHeader writes the message header and tag into the buffer with overflow safety.
372+
func (m *Mailbox) writeRequestHeader(bufferBytes int, tagID uint32, args []uint32) error {
373+
bufLen := len(m.buf)
374+
375+
computedLen := bufLen * MailboxWordBytes
376+
if bufLen < 0 || computedLen < 0 || computedLen > int(math.MaxUint32) {
377+
return fmt.Errorf("mailbox header length out of range: %d", computedLen)
378+
}
379+
380+
if bufferBytes < 0 || bufferBytes > int(math.MaxUint32) {
381+
return fmt.Errorf("mailbox bufferBytes out of range: %d", bufferBytes)
382+
}
383+
384+
m.buf[0] = uint32(computedLen)
370385
m.buf[1] = RequestCodeDefault
371386
m.buf[2] = tagID
372387
m.buf[3] = uint32(bufferBytes)
373388
m.buf[4] = 0 // request
374389
copy(m.buf[MailboxRequestHeaderWords:], args)
390+
391+
return nil
375392
}
376393

377394
// debugBuffer prints out buffer values for debugging.

0 commit comments

Comments
 (0)