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
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
f27f7bfe79
Коммит
b0f26cedf2
28
app/file.go
28
app/file.go
@@ -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)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user