Use more accurate size to verify payload length
This commit is contained in:
@@ -354,11 +354,11 @@ func (s socket) Get(
|
|||||||
|
|
||||||
// Start service
|
// Start service
|
||||||
const cipherReadBufSize = 4096
|
const cipherReadBufSize = 4096
|
||||||
|
const cipherMaxDataPayloadLen = cipherReadBufSize - 2
|
||||||
|
|
||||||
cipherReadBuf := [cipherReadBufSize]byte{}
|
cipherReadBuf := [cipherReadBufSize]byte{}
|
||||||
cipherWriteBuf := [cipherReadBufSize]byte{}
|
cipherWriteBuf := [cipherReadBufSize]byte{}
|
||||||
|
maxWriteLen := int(cipherReadBufSize) - (writeCipher.Overhead() + 2)
|
||||||
maxWriteLen := cipherReadBufSize - (writeCipher.Overhead() + 2)
|
|
||||||
|
|
||||||
senderLock := sync.Mutex{}
|
senderLock := sync.Mutex{}
|
||||||
cmdExec, cmdExecErr := s.commander.New(
|
cmdExec, cmdExecErr := s.commander.New(
|
||||||
@@ -381,7 +381,7 @@ func (s socket) Get(
|
|||||||
packageSize <<= 8
|
packageSize <<= 8
|
||||||
packageSize |= uint16(cipherReadBuf[1])
|
packageSize |= uint16(cipherReadBuf[1])
|
||||||
|
|
||||||
if packageSize <= 0 {
|
if packageSize <= 0 || packageSize > cipherMaxDataPayloadLen {
|
||||||
return nil, ErrSocketInvalidDataPackage
|
return nil, ErrSocketInvalidDataPackage
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,11 +392,8 @@ func (s socket) Get(
|
|||||||
return nil, rErr
|
return nil, rErr
|
||||||
}
|
}
|
||||||
|
|
||||||
return readCipher.Open(rData[:0], readNonce[:], rData, nil)
|
return readCipher.Open(
|
||||||
}
|
cipherReadBuf[:0], readNonce[:], rData, nil)
|
||||||
|
|
||||||
if packageSize > cipherReadBufSize {
|
|
||||||
return nil, ErrSocketInvalidDataPackage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, rErr = io.ReadFull(&wsReader, cipherReadBuf[:packageSize])
|
_, rErr = io.ReadFull(&wsReader, cipherReadBuf[:packageSize])
|
||||||
|
|||||||
Reference in New Issue
Block a user