From 449c44bc0a3e3a8e9c741de1f8e30966cac153d9 Mon Sep 17 00:00:00 2001 From: ale <ale@incal.net> Date: Sat, 2 Apr 2016 14:42:42 +0100 Subject: [PATCH] recover from panic in metadata extraction --- metadata.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/metadata.go b/metadata.go index 6e81265..ceecc8e 100644 --- a/metadata.go +++ b/metadata.go @@ -245,10 +245,16 @@ func parseAnything(filename string) (*Metadata, error) { type fileProvider struct{} -func (p *fileProvider) Lookup(storage *FileStorage, path, filetype string) (*Metadata, error) { +func (p *fileProvider) Lookup(storage *FileStorage, path, filetype string) (m *Metadata, err error) { + // Catch panics from some of the underlying libraries (gmobi + // in particular) and transform them into errors. + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("panic(): %v", r.(error)) + } + }() + path = storage.Abs(path) - var m *Metadata - var err error switch filetype { case ".epub": m, err = parseEpub(path) @@ -257,13 +263,10 @@ func (p *fileProvider) Lookup(storage *FileStorage, path, filetype string) (*Met case ".pdf": m, err = parseAnything(path) default: - return nil, errors.New("unsupported file format") - } - if err != nil { - return nil, err + err = errors.New("unsupported file format") } - return m, nil + return } func (p *fileProvider) GetBookCover(storage *FileStorage, path string) (string, error) { -- GitLab