summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2018-09-10 07:38:04 -0400
committerMartin Kraft <martinkraft@gmail.com>2018-09-10 07:38:04 -0400
commite39ab5c7dcfd6f16264b4a601aca7fa5a572dccf (patch)
tree99f5746add4fc4c915ab3a9d53a6b39e9b2ccbb4
parent0027d998555d47f9a75a896d8c6c85a8b4645ad0 (diff)
downloadchat-e39ab5c7dcfd6f16264b4a601aca7fa5a572dccf.tar.gz
chat-e39ab5c7dcfd6f16264b4a601aca7fa5a572dccf.tar.bz2
chat-e39ab5c7dcfd6f16264b4a601aca7fa5a572dccf.zip
MM-12007 Add max dimensions to emoji images (#9379)
-rw-r--r--api4/emoji_test.go19
-rw-r--r--app/emoji.go13
-rw-r--r--i18n/en.json4
3 files changed, 29 insertions, 7 deletions
diff --git a/api4/emoji_test.go b/api4/emoji_test.go
index 1a9dc8e0f..e3aca4497 100644
--- a/api4/emoji_test.go
+++ b/api4/emoji_test.go
@@ -9,6 +9,7 @@ import (
_ "image/gif"
"testing"
+ "github.com/mattermost/mattermost-server/app"
"github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/utils"
@@ -105,16 +106,26 @@ func TestCreateEmoji(t *testing.T) {
t.Fatal("create with wrong name")
}
+ // try to create an emoji that's too wide
+ emoji = &model.Emoji{
+ CreatorId: th.BasicUser.Id,
+ Name: model.NewId(),
+ }
+
+ newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, app.MaxEmojiOriginalWidth+1), "image.gif")
+ if resp.Error == nil {
+ t.Fatal("should fail - emoji is too wide")
+ }
+
// try to create an emoji that's too tall
emoji = &model.Emoji{
CreatorId: th.BasicUser.Id,
Name: model.NewId(),
}
- newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 1000), "image.gif")
- CheckNoError(t, resp)
- if newEmoji.Name != emoji.Name {
- t.Fatal("create with wrong name")
+ newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, app.MaxEmojiOriginalHeight+1, 10), "image.gif")
+ if resp.Error == nil {
+ t.Fatal("should fail - emoji is too tall")
}
// try to create an emoji that's too large
diff --git a/app/emoji.go b/app/emoji.go
index b07331e65..864dc31bf 100644
--- a/app/emoji.go
+++ b/app/emoji.go
@@ -23,9 +23,11 @@ import (
)
const (
- MaxEmojiFileSize = 1 << 20 // 1 MB
- MaxEmojiWidth = 128
- MaxEmojiHeight = 128
+ MaxEmojiFileSize = 1 << 20 // 1 MB
+ MaxEmojiWidth = 128
+ MaxEmojiHeight = 128
+ MaxEmojiOriginalWidth = 1028
+ MaxEmojiOriginalHeight = 1028
)
func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *multipart.Form) (*model.Emoji, *model.AppError) {
@@ -85,6 +87,11 @@ func (a *App) UploadEmojiImage(id string, imageData *multipart.FileHeader) *mode
// make sure the file is an image and is within the required dimensions
if config, _, err := image.DecodeConfig(bytes.NewReader(buf.Bytes())); err != nil {
return model.NewAppError("uploadEmojiImage", "api.emoji.upload.image.app_error", nil, "", http.StatusBadRequest)
+ } else if config.Width > MaxEmojiOriginalWidth || config.Height > MaxEmojiOriginalHeight {
+ return model.NewAppError("uploadEmojiImage", "api.emoji.upload.large_image.too_large.app_error", map[string]interface{}{
+ "MaxWidth": MaxEmojiOriginalWidth,
+ "MaxHeight": MaxEmojiOriginalHeight,
+ }, "", http.StatusBadRequest)
} else if config.Width > MaxEmojiWidth || config.Height > MaxEmojiHeight {
data := buf.Bytes()
newbuf := bytes.NewBuffer(nil)
diff --git a/i18n/en.json b/i18n/en.json
index 5345fa0cf..0ad1722fc 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -1009,6 +1009,10 @@
"translation": "Unable to create emoji. File must be a PNG, JPEG, or GIF."
},
{
+ "id": "api.emoji.upload.large_image.too_large.app_error",
+ "translation": "Unable to create emoji. Image must be smaller than {{.MaxWidth}} by {{.MaxHeight}}."
+ },
+ {
"id": "api.emoji.upload.large_image.decode_error",
"translation": "Unable to create emoji. An error occurred when trying to decode the image."
},