Skip to content

Commit

Permalink
fix: panic when recved invalid msg from device
Browse files Browse the repository at this point in the history
Signed-off-by: Jianhui Zhao <[email protected]>
  • Loading branch information
zhaojh329 committed Feb 3, 2021
1 parent 10f9f40 commit d6c3bd9
Showing 1 changed file with 43 additions and 3 deletions.
46 changes: 43 additions & 3 deletions device.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,18 @@ func (dev *device) Close() {
}
}

func parseDeviceInfo(b []byte) (string, string, string) {
func parseDeviceInfo(b []byte) (string, string, string, bool) {
fields := bytes.Split(b, []byte{0})

if len(fields) < 3 {
return "", "", "", false
}

id := string(fields[0])
desc := string(fields[1])
token := string(fields[2])

return id, desc, token
return id, desc, token, true
}

func parseHeartbeat(dev *device, b []byte) {
Expand Down Expand Up @@ -168,26 +172,52 @@ func (dev *device) readLoop() {

switch typ {
case msgTypeRegister:
id, desc, token := parseDeviceInfo(b)
id, desc, token, ok := parseDeviceInfo(b)
if !ok {
log.Error().Msg("msgTypeRegister: invalid")
return
}

dev.id = id
dev.token = token
dev.desc = desc
dev.br.register <- dev

case msgTypeLogin:
if msgLen < 1 {
log.Error().Msg("msgTypeLogin: invalid")
return
}

code := b[0]
sid := byte(0)

if code == 0 {
if msgLen < 2 {
log.Error().Msg("msgTypeLogin: invalid")
return
}

sid = b[1]
}
dev.br.loginAck <- &loginAckMsg{dev.id, sid, code == 1}

case msgTypeLogout:
if msgLen < 1 {
log.Error().Msg("msgTypeLogout: invalid")
return
}

dev.br.logout <- dev.id + string(b[0]+'0')

case msgTypeTermData:
fallthrough
case msgTypeFile:
if msgLen < 1 {
log.Error().Msg("msgTypeTermData|msgTypeFile: invalid")
return
}

sid := dev.id + string(b[0]+'0')

if typ == msgTypeFile {
Expand All @@ -199,9 +229,19 @@ func (dev *device) readLoop() {
dev.br.termMessage <- &termMessage{sid, b}

case msgTypeCmd:
if msgLen < 1 {
log.Error().Msg("msgTypeCmd: invalid")
return
}

dev.br.cmdMessage <- b

case msgTypeWeb:
if msgLen < 18 {
log.Error().Msg("msgTypeWeb: invalid")
return
}

dev.br.webMessage <- &webResp{b, dev}

case msgTypeHeartbeat:
Expand Down

0 comments on commit d6c3bd9

Please sign in to comment.