summaryrefslogtreecommitdiffstats
path: root/bridge/telegram/handlers.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-07-08 22:19:45 +0200
committerGitHub <noreply@github.com>2019-07-08 22:19:45 +0200
commit1fb91c6316f86426d62d38562f957963a522cdd1 (patch)
treee06fcb74dfab8269d7d9a5abed3587b1f32a897f /bridge/telegram/handlers.go
parente60949ff3f84e899d25103f85ed948d26a1b44c3 (diff)
downloadmatterbridge-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/handlers.go')
-rw-r--r--bridge/telegram/handlers.go12
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)
}
}
}