MM-38774 - partial fix for: Community running out of memory (#18445)

* prevent invalid images from entering generateMiniPreview in the future

* fixing err, err2, imgErr

* linting

* load actual pngs and gifs in tests

* consistent style
Этот коммит содержится в:
Christopher Poile
2021-09-23 13:17:37 -04:00
коммит произвёл GitHub
родитель f27f7bfe79
Коммит b0f26cedf2
2 изменённых файлов: 38 добавлений и 22 удалений

Просмотреть файл

@@ -1118,28 +1118,38 @@ func (a *App) generatePreviewImage(img image.Image, previewPath string) {
// will save fileinfo with the preview added
func (a *App) generateMiniPreview(fi *model.FileInfo) {
if fi.IsImage() && fi.MiniPreview == nil {
file, err := a.FileReader(fi.Path)
if err != nil {
mlog.Debug("error reading image file", mlog.Err(err))
file, appErr := a.FileReader(fi.Path)
if appErr != nil {
mlog.Debug("error reading image file", mlog.Err(appErr))
return
}
defer file.Close()
img, release, imgErr := prepareImage(a.srv.imgDecoder, file)
if imgErr != nil {
mlog.Debug("generateMiniPreview: prepareImage failed", mlog.Err(imgErr),
img, release, err := prepareImage(a.srv.imgDecoder, file)
if err != nil {
mlog.Debug("generateMiniPreview: prepareImage failed", mlog.Err(err),
mlog.String("fileinfo_id", fi.Id), mlog.String("channel_id", fi.ChannelId),
mlog.String("creator_id", fi.CreatorId))
// Since this file is not a valid image (for whatever reason), prevent this fileInfo
// from entering generateMiniPreview in the future
fi.UpdateAt = model.GetMillis()
fi.MimeType = "invalid-" + fi.MimeType
if _, err = a.Srv().Store.FileInfo().Upsert(fi); err != nil {
mlog.Debug("Invalidating FileInfo failed", mlog.Err(err))
}
return
}
defer release()
if miniPreview, err := imaging.GenerateMiniPreviewImage(img,
var miniPreview []byte
if miniPreview, err = imaging.GenerateMiniPreviewImage(img,
miniPreviewImageWidth, miniPreviewImageHeight, jpegEncQuality); err != nil {
mlog.Info("Unable to generate mini preview image", mlog.Err(err))
} else {
fi.MiniPreview = &miniPreview
}
if _, appErr := a.Srv().Store.FileInfo().Upsert(fi); appErr != nil {
mlog.Debug("creating mini preview failed", mlog.Err(appErr))
if _, err = a.Srv().Store.FileInfo().Upsert(fi); err != nil {
mlog.Debug("creating mini preview failed", mlog.Err(err))
} else {
a.Srv().Store.FileInfo().InvalidateFileInfosForPostCache(fi.PostId, false)
}