Check if buffer read is complete before decoding
This commit is contained in:
		
							parent
							
								
									097037d212
								
							
						
					
					
						commit
						e8802e3215
					
				@ -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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user