diff options
author | kali kaneko (leap communications) <kali@leap.se> | 2020-01-31 23:05:31 -0600 |
---|---|---|
committer | kali kaneko (leap communications) <kali@leap.se> | 2020-02-11 20:32:30 +0100 |
commit | d501f3f88ecd8410ae4040c62a099017db8dcb9f (patch) | |
tree | 951de2c481ddae4e679ff59e90274652b69f4532 /pkg/auth/sip2/spec.go | |
parent | ec1cda75a94f88ffbc4e6ea283972fe1fdaabe70 (diff) |
[refactor] telnet dispatcher, handle errors
Diffstat (limited to 'pkg/auth/sip2/spec.go')
-rw-r--r-- | pkg/auth/sip2/spec.go | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/pkg/auth/sip2/spec.go b/pkg/auth/sip2/spec.go index 09561e6..80fbe7a 100644 --- a/pkg/auth/sip2/spec.go +++ b/pkg/auth/sip2/spec.go @@ -16,6 +16,7 @@ package sip2 import ( + "errors" "log" "strconv" "strings" @@ -127,11 +128,22 @@ func (p *Parser) getFieldValue(msg *message, field string) (string, bool) { return "", false } -func (p *Parser) parseMessage(msg string) *message { +func (p *Parser) parseMessage(msg string) (*message, error) { + /* FIXME */ + /* + http: panic serving 186.26.116.7:1292: runtime error: slice bounds out of range + */ + if len(msg) == 0 { + return &message{}, errors.New("empty message") + } + if len(msg) < (2 + len(telnetTerminator)) { + return &message{}, errors.New("parseMessage: message too short") + } txt := msg[:len(msg)-len(telnetTerminator)] code, err := strconv.Atoi(txt[:2]) if nil != err { log.Printf("Error parsing integer: %s\n", txt[:2]) + return &message{}, errors.New("parseMessage: error parsing integer") } spec := p.getMessageSpecByCode(code) txt = txt[2:] @@ -143,7 +155,7 @@ func (p *Parser) parseMessage(msg string) *message { message.fixedFields = append(message.fixedFields, fixedField{sp, value}) } if len(txt) == 0 { - return message + return message, nil } for _, part := range strings.Split(txt, "|") { if len(part) > 0 { @@ -152,5 +164,5 @@ func (p *Parser) parseMessage(msg string) *message { message.fields = append(message.fields, variableField{partSpec, value}) } } - return message + return message, nil } |