adjusted maxpulse to match implementation; added buffer overflow protection
This commit is contained in:
@@ -6,4 +6,4 @@ pca9685:
|
|||||||
device: "dev/i2c-2"
|
device: "dev/i2c-2"
|
||||||
address: 0x40
|
address: 0x40
|
||||||
minpulse: 0
|
minpulse: 0
|
||||||
maxpulse: 65535
|
maxpulse: 4095
|
||||||
|
9
main.go
9
main.go
@@ -56,7 +56,7 @@ func check(e error) {
|
|||||||
|
|
||||||
func (daemon *LedDaemon) receive() {
|
func (daemon *LedDaemon) receive() {
|
||||||
for {
|
for {
|
||||||
message := make([]byte, 4096)
|
message := make([]byte, 8192)
|
||||||
length, err := daemon.socket.Read(message)
|
length, err := daemon.socket.Read(message)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
daemon.socket.Close()
|
daemon.socket.Close()
|
||||||
@@ -66,10 +66,15 @@ func (daemon *LedDaemon) receive() {
|
|||||||
log.Debugf("[%s] Read %d bytes", daemon.socket.RemoteAddr(), length)
|
log.Debugf("[%s] Read %d bytes", daemon.socket.RemoteAddr(), length)
|
||||||
|
|
||||||
for i := 0; i < 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)
|
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{}
|
backendMsg := &ledd.BackendWrapperMessage{}
|
||||||
err = proto.Unmarshal(message[i+4:i+msgLen+4], backendMsg)
|
err = proto.Unmarshal(message[i+4:i+msgLen+4], backendMsg)
|
||||||
i += msgLen + 4
|
i += msgLen + 4
|
||||||
|
Reference in New Issue
Block a user