Check if buffer read is complete before decoding

This commit is contained in:
Dan Sparks 2014-09-29 18:01:50 -07:00
parent 097037d212
commit e8802e3215
2 changed files with 5 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package worker
import ( import (
"bufio" "bufio"
"encoding/binary"
"net" "net"
"sync" "sync"
) )
@ -77,7 +78,8 @@ func (a *agent) work() {
if len(leftdata) > 0 { // some data left for processing if len(leftdata) > 0 { // some data left for processing
data = append(leftdata, data...) data = append(leftdata, data...)
} }
if len(data) < minPacketLength { // not enough data length := len(data) - minPacketLength
if length < 0 || length < int(binary.BigEndian.Uint32(data[8:12])) {
leftdata = data leftdata = data
continue continue
} }

View File

@ -86,6 +86,8 @@ func (inpack *inPack) UpdateStatus(numerator, denominator int) {
// Decode job from byte slice // Decode job from byte slice
func decodeInPack(data []byte) (inpack *inPack, l int, err error) { func decodeInPack(data []byte) (inpack *inPack, l int, err error) {
// The next three checks should be completely unnecessary, as they are checked in
// agent.work.
if len(data) < minPacketLength { // valid package should not less 12 bytes if len(data) < minPacketLength { // valid package should not less 12 bytes
err = fmt.Errorf("Invalid data: %v", data) err = fmt.Errorf("Invalid data: %v", data)
return return