Fix rendering empty/malformed messages

This commit is contained in:
Tulir Asokan 2022-04-19 12:01:56 +03:00
parent 1e6174f828
commit 030c0c6ec5
2 changed files with 26 additions and 11 deletions

View File

@ -495,7 +495,11 @@ func Parse(prefs *config.UserPreferences, room *rooms.Room, content *event.Messa
parser := htmlParser{room: room, prefs: prefs, evt: evt} parser := htmlParser{room: room, prefs: prefs, evt: evt}
root := parser.Parse(htmlData) root := parser.Parse(htmlData)
beRoot := root.(*ContainerEntity) if root == nil {
return nil
}
beRoot, ok := root.(*ContainerEntity)
if ok {
beRoot.Block = false beRoot.Block = false
if len(beRoot.Children) > 0 { if len(beRoot.Children) > 0 {
beChild, ok := beRoot.Children[0].(*ContainerEntity) beChild, ok := beRoot.Children[0].(*ContainerEntity)
@ -504,6 +508,7 @@ func Parse(prefs *config.UserPreferences, room *rooms.Room, content *event.Messa
beChild.Block = false beChild.Block = false
} }
} }
}
if content.MsgType == event.MsgEmote { if content.MsgType == event.MsgEmote {
root = &ContainerEntity{ root = &ContainerEntity{

View File

@ -204,11 +204,21 @@ func ParseMessage(matrix ifc.MatrixContainer, room *rooms.Room, evt *muksevt.Eve
} }
switch content.MsgType { switch content.MsgType {
case event.MsgText, event.MsgNotice, event.MsgEmote: case event.MsgText, event.MsgNotice, event.MsgEmote:
if content.Format == event.FormatHTML { var htmlEntity html.Entity
return NewHTMLMessage(evt, displayname, html.Parse(matrix.Preferences(), room, content, evt, displayname)) if content.Format == event.FormatHTML && len(content.FormattedBody) > 0 {
htmlEntity = html.Parse(matrix.Preferences(), room, content, evt, displayname)
if htmlEntity == nil {
htmlEntity = html.NewTextEntity("Malformed message")
htmlEntity.AdjustStyle(html.AdjustStyleTextColor(tcell.ColorRed), html.AdjustStyleReasonNormal)
} }
} else if len(content.Body) > 0 {
content.Body = strings.Replace(content.Body, "\t", " ", -1) content.Body = strings.Replace(content.Body, "\t", " ", -1)
return NewHTMLMessage(evt, displayname, html.TextToEntity(content.Body, evt.ID, matrix.Preferences().EnableInlineURLs())) htmlEntity = html.TextToEntity(content.Body, evt.ID, matrix.Preferences().EnableInlineURLs())
} else {
htmlEntity = html.NewTextEntity("Blank message")
htmlEntity.AdjustStyle(html.AdjustStyleTextColor(tcell.ColorRed), html.AdjustStyleReasonNormal)
}
return NewHTMLMessage(evt, displayname, htmlEntity)
case event.MsgImage, event.MsgVideo, event.MsgAudio, event.MsgFile: case event.MsgImage, event.MsgVideo, event.MsgAudio, event.MsgFile:
msg := NewFileMessage(matrix, evt, displayname) msg := NewFileMessage(matrix, evt, displayname)
if !matrix.Preferences().DisableDownloads { if !matrix.Preferences().DisableDownloads {