diff --git a/config.yaml b/config.yaml index e4f419d..a128aa0 100644 --- a/config.yaml +++ b/config.yaml @@ -6,4 +6,4 @@ pca9685: device: "dev/i2c-2" address: 0x40 minpulse: 0 - maxpulse: 65535 + maxpulse: 4095 diff --git a/main.go b/main.go index 184a9f5..4fbd643 100644 --- a/main.go +++ b/main.go @@ -56,7 +56,7 @@ func check(e error) { func (daemon *LedDaemon) receive() { for { - message := make([]byte, 4096) + message := make([]byte, 8192) length, err := daemon.socket.Read(message) if err != nil { daemon.socket.Close() @@ -66,10 +66,15 @@ func (daemon *LedDaemon) receive() { log.Debugf("[%s] Read %d bytes", daemon.socket.RemoteAddr(), length) for i := 0; i < length; { - msgLen := int(binary.BigEndian.Uint32(message[i:i+4])) + msgLen := int(binary.BigEndian.Uint32(message[i : i+4])) log.Debugf("[%s] Reading protobuf after %d (len=%d)", daemon.socket.RemoteAddr(), i, msgLen) + if i+msgLen+4 > len(message)-1 { + log.Warningf("[%s] Buffer overflow. At least one message has been discarded!", daemon.socket.RemoteAddr()) + break + } + backendMsg := &ledd.BackendWrapperMessage{} err = proto.Unmarshal(message[i+4:i+msgLen+4], backendMsg) i += msgLen + 4