From 6d733e35f74a9f4d00d0b5d0f630dd49e5c3b10a Mon Sep 17 00:00:00 2001 From: Hanzei <16541325+hanzei@users.noreply.github.com> Date: Fri, 25 Jan 2019 18:31:19 +0100 Subject: [PATCH] Fix panicing of ParseSlackAttachment for nil in attachments list (#10141) --- model/slack_attachment.go | 9 +++++++- model/slack_attachment_test.go | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 model/slack_attachment_test.go diff --git a/model/slack_attachment.go b/model/slack_attachment.go index 17abddeb06..405686ed82 100644 --- a/model/slack_attachment.go +++ b/model/slack_attachment.go @@ -68,7 +68,13 @@ func ParseSlackAttachment(post *Post, attachments []*SlackAttachment) { post.Type = POST_SLACK_ATTACHMENT } + postAttachments := []*SlackAttachment{} + for _, attachment := range attachments { + if attachment == nil { + continue + } + attachment.Text = ParseSlackLinksToMarkdown(attachment.Text) attachment.Pretext = ParseSlackLinksToMarkdown(attachment.Pretext) @@ -77,8 +83,9 @@ func ParseSlackAttachment(post *Post, attachments []*SlackAttachment) { field.Value = ParseSlackLinksToMarkdown(value) } } + postAttachments = append(postAttachments, attachment) } - post.AddProp("attachments", attachments) + post.AddProp("attachments", postAttachments) } func ParseSlackLinksToMarkdown(text string) string { diff --git a/model/slack_attachment_test.go b/model/slack_attachment_test.go new file mode 100644 index 0000000000..8043f34245 --- /dev/null +++ b/model/slack_attachment_test.go @@ -0,0 +1,41 @@ +package model + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseSlackAttachment(t *testing.T) { + t.Run("empty list", func(t *testing.T) { + post := &Post{} + attachments := []*SlackAttachment{} + + ParseSlackAttachment(post, attachments) + + expectedPost := &Post{ + Type: POST_SLACK_ATTACHMENT, + Props: map[string]interface{}{ + "attachments": []*SlackAttachment{}, + }, + } + assert.Equal(t, expectedPost, post) + }) + + t.Run("list with nil", func(t *testing.T) { + post := &Post{} + attachments := []*SlackAttachment{ + nil, + } + + ParseSlackAttachment(post, attachments) + + expectedPost := &Post{ + Type: POST_SLACK_ATTACHMENT, + Props: map[string]interface{}{ + "attachments": []*SlackAttachment{}, + }, + } + assert.Equal(t, expectedPost, post) + }) +}