Skip to content

Commit

Permalink
connection: fix svacer issue
Browse files Browse the repository at this point in the history
Changed type of 'length' variable in 'read' function to avoid overflow when calculating it.
  • Loading branch information
better0fdead committed Dec 5, 2023
1 parent 36b05f6 commit bfdca0e
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -1158,7 +1158,7 @@ func (conn *Connection) timeouts() {
}

func read(r io.Reader, lenbuf []byte) (response []byte, err error) {
var length int
var length uint64

if _, err = io.ReadFull(r, lenbuf); err != nil {
return
Expand All @@ -1167,15 +1167,20 @@ func read(r io.Reader, lenbuf []byte) (response []byte, err error) {
err = errors.New("wrong response header")
return
}
length = (int(lenbuf[1]) << 24) +
(int(lenbuf[2]) << 16) +
(int(lenbuf[3]) << 8) +
int(lenbuf[4])
length = (uint64(lenbuf[1]) << 24) +
(uint64(lenbuf[2]) << 16) +
(uint64(lenbuf[3]) << 8) +
uint64(lenbuf[4])

if length == 0 {
switch {
case length == 0:
err = errors.New("response should not be 0 length")
return
case length > math.MaxUint32:
err = errors.New("response is too big")
return
}

response = make([]byte, length)
_, err = io.ReadFull(r, response)

Expand Down

0 comments on commit bfdca0e

Please sign in to comment.