diff options
author | Wim <wim@42.be> | 2019-07-08 22:19:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-08 22:19:45 +0200 |
commit | 1fb91c6316f86426d62d38562f957963a522cdd1 (patch) | |
tree | e06fcb74dfab8269d7d9a5abed3587b1f32a897f /bridge/telegram | |
parent | e60949ff3f84e899d25103f85ed948d26a1b44c3 (diff) | |
download | matterbridge-msglm-1fb91c6316f86426d62d38562f957963a522cdd1.tar.gz matterbridge-msglm-1fb91c6316f86426d62d38562f957963a522cdd1.tar.bz2 matterbridge-msglm-1fb91c6316f86426d62d38562f957963a522cdd1.zip |
Fix panic by checking slice bounds in handleEntities (telegram). Fixes #857 (#858)
Besides the bound checking, this now also use utf16 as suggested by
https://github.com/go-telegram-bot-api/telegram-bot-api/issues/231
Diffstat (limited to 'bridge/telegram')
-rw-r--r-- | bridge/telegram/handlers.go | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/bridge/telegram/handlers.go b/bridge/telegram/handlers.go index 98b10207..bbe12437 100644 --- a/bridge/telegram/handlers.go +++ b/bridge/telegram/handlers.go @@ -5,10 +5,11 @@ import ( "regexp" "strconv" "strings" + "unicode/utf16" "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/helper" - "github.com/go-telegram-bot-api/telegram-bot-api" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" ) func (b *Btelegram) handleUpdate(rmsg *config.Message, message, posted, edited *tgbotapi.Message) *tgbotapi.Message { @@ -375,8 +376,13 @@ func (b *Btelegram) handleEntities(rmsg *config.Message, message *tgbotapi.Messa b.Log.Errorf("entity text_link url parse failed: %s", err) continue } - link := rmsg.Text[e.Offset : e.Offset+e.Length] - rmsg.Text = strings.Replace(rmsg.Text, link, url.String(), 1) + utfEncodedString := utf16.Encode([]rune(rmsg.Text)) + if e.Offset+e.Length > len(utfEncodedString) { + b.Log.Errorf("entity length is too long %d > %d", e.Offset+e.Length, len(utfEncodedString)) + continue + } + link := utf16.Decode(utfEncodedString[e.Offset : e.Offset+e.Length]) + rmsg.Text = strings.Replace(rmsg.Text, string(link), url.String(), 1) } } } |