Skip to content

Commit b500bcd

Browse files
better0fdeadoleg-jukovec
authored andcommitted
connection: fix svacer issue
Changed type of 'length' variable in 'read' function to avoid overflow when calculating it. (cherry picked from 7d73f6a)
1 parent 1e17e15 commit b500bcd

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

connection.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,7 @@ func (conn *Connection) timeouts() {
11901190
}
11911191

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

11951195
if _, err = io.ReadFull(r, lenbuf); err != nil {
11961196
return
@@ -1199,15 +1199,20 @@ func read(r io.Reader, lenbuf []byte) (response []byte, err error) {
11991199
err = errors.New("Wrong response header")
12001200
return
12011201
}
1202-
length = (int(lenbuf[1]) << 24) +
1203-
(int(lenbuf[2]) << 16) +
1204-
(int(lenbuf[3]) << 8) +
1205-
int(lenbuf[4])
1202+
length = (uint64(lenbuf[1]) << 24) +
1203+
(uint64(lenbuf[2]) << 16) +
1204+
(uint64(lenbuf[3]) << 8) +
1205+
uint64(lenbuf[4])
12061206

1207-
if length == 0 {
1208-
err = errors.New("Response should not be 0 length")
1207+
switch {
1208+
case length == 0:
1209+
err = errors.New("response should not be 0 length")
1210+
return
1211+
case length > math.MaxUint32:
1212+
err = errors.New("response is too big")
12091213
return
12101214
}
1215+
12111216
response = make([]byte, length)
12121217
_, err = io.ReadFull(r, response)
12131218

0 commit comments

Comments
 (0)