diff --git a/pkg/handlers/archive.go b/pkg/handlers/archive.go index 6faeee123..ff92af439 100644 --- a/pkg/handlers/archive.go +++ b/pkg/handlers/archive.go @@ -136,14 +136,20 @@ func (d *Archive) extractorHandler(archiveChan chan ([]byte)) func(context.Conte } // ReadToMax reads up to the max size. -func (d *Archive) ReadToMax(reader io.Reader) ([]byte, error) { +func (d *Archive) ReadToMax(reader io.Reader) (data []byte, err error) { // Archiver v4 is in alpha and using an experimental version of // rardecode. There is a bug somewhere with rar decoder format 29 // that can lead to a panic. An issue is open in rardecode repo // https://github.com/nwaples/rardecode/issues/30. defer func() { - if err := recover(); err != nil { - log.Errorf("Panic occurred when reading archive: %v", err) + if r := recover(); r != nil { + log.Errorf("Panic occurred when reading archive: %v", r) + // Return an error from ReadToMax. + if e, ok := r.(error); ok { + err = e + } else { + err = fmt.Errorf("Panic occurred: %v", r) + } } }() fileContent := bytes.Buffer{}