修复RCON库过于信任包Size字段的问题

This commit is contained in:
Tnze
2020-01-16 12:57:01 +08:00
parent 8d4b2421f8
commit 4370b6c3cd

View File

@ -9,6 +9,8 @@ import (
"net"
)
const MaxRCONPackageSize = 4096
func DialRCON(addr string, password string) (client RCONClientConn, err error) {
c := &RCONConn{ReqID: rand.Int31()}
client = c
@ -58,6 +60,16 @@ func (r *RCONConn) ReadPacket() (RequestID, Type int32, Payload string, err erro
return
}
//check length
if Length < 4+4+0+2 {
err = errors.New("packet too short")
return
}
if Length > MaxRCONPackageSize {
err = errors.New("packet too large")
return
}
//read packet data
buf := make([]byte, Length)
err = binary.Read(r, binary.LittleEndian, &buf)
@ -65,13 +77,6 @@ func (r *RCONConn) ReadPacket() (RequestID, Type int32, Payload string, err erro
err = fmt.Errorf("read packet body fail: %v", err)
return
}
//check length
if Length < 4+4+0+2 {
err = errors.New("packet too short")
return
}
RequestID = int32(binary.LittleEndian.Uint32(buf[:4]))
Type = int32(binary.LittleEndian.Uint32(buf[4:8]))
Payload = string(buf[8 : Length-2])