From 17b9baa5d62310845fdcd8751923b586735ca7e6 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 30 Sep 2022 08:47:37 +0800 Subject: [PATCH] fix(imagorvideo): close reader on ReadSeeker size 0 --- processor.go | 53 ++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/processor.go b/processor.go index a10cf8a..51ea8a3 100644 --- a/processor.go +++ b/processor.go @@ -94,30 +94,35 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp default: } if reader == nil { - if reader, size, err = in.NewReadSeeker(); err != nil || size <= 0 { - // write to temp file if read seeker not available - if reader, _, err = in.NewReader(); err != nil { - return - } - var file *os.File - if file, err = os.CreateTemp("", "imagor-"); err != nil { - return - } - var filename = file.Name() - defer func() { - _ = os.Remove(filename) - p.Logger.Debug("cleanup", zap.String("file", filename)) - }() - if size, err = io.Copy(file, reader); err != nil { - return - } - p.Logger.Debug("temp", - zap.String("file", filename), - zap.Int64("size", size)) - _ = file.Close() - if reader, err = os.Open(filename); err != nil { - return - } + reader, size, err = in.NewReadSeeker() + if err == nil && size <= 0 { + _ = reader.Close() + reader = nil + } + } + if reader == nil { + // write to temp file if read seeker not available + if reader, _, err = in.NewReader(); err != nil { + return + } + var file *os.File + if file, err = os.CreateTemp("", "imagor-"); err != nil { + return + } + var filename = file.Name() + defer func() { + _ = os.Remove(filename) + p.Logger.Debug("cleanup", zap.String("file", filename)) + }() + if size, err = io.Copy(file, reader); err != nil { + return + } + p.Logger.Debug("temp", + zap.String("file", filename), + zap.Int64("size", size)) + _ = file.Close() + if reader, err = os.Open(filename); err != nil { + return } } av, err := ffmpeg.LoadAVContext(ctx, reader, size)