From b3d3f531a47e3dd706fa287e89a83d15dd1a3603 Mon Sep 17 00:00:00 2001 From: Miccah Date: Wed, 16 Nov 2022 14:24:05 -0600 Subject: [PATCH] Return an error from ReadToMax when it panics (#925) --- pkg/handlers/archive.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/handlers/archive.go b/pkg/handlers/archive.go index 6faeee12334f..ff92af439e4f 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{}