fix(imagorvideo): close reader on ReadSeeker size 0

This commit is contained in:
Adrian Shum 2022-09-30 08:47:37 +08:00 committed by GitHub
parent 65aaf7d702
commit 17b9baa5d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -94,30 +94,35 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp
default: default:
} }
if reader == nil { if reader == nil {
if reader, size, err = in.NewReadSeeker(); err != nil || size <= 0 { reader, size, err = in.NewReadSeeker()
// write to temp file if read seeker not available if err == nil && size <= 0 {
if reader, _, err = in.NewReader(); err != nil { _ = reader.Close()
return reader = nil
} }
var file *os.File }
if file, err = os.CreateTemp("", "imagor-"); err != nil { if reader == nil {
return // write to temp file if read seeker not available
} if reader, _, err = in.NewReader(); err != nil {
var filename = file.Name() return
defer func() { }
_ = os.Remove(filename) var file *os.File
p.Logger.Debug("cleanup", zap.String("file", filename)) if file, err = os.CreateTemp("", "imagor-"); err != nil {
}() return
if size, err = io.Copy(file, reader); err != nil { }
return var filename = file.Name()
} defer func() {
p.Logger.Debug("temp", _ = os.Remove(filename)
zap.String("file", filename), p.Logger.Debug("cleanup", zap.String("file", filename))
zap.Int64("size", size)) }()
_ = file.Close() if size, err = io.Copy(file, reader); err != nil {
if reader, err = os.Open(filename); err != nil { return
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) av, err := ffmpeg.LoadAVContext(ctx, reader, size)