diff --git a/scanner/metadata/taglib/taglib.go b/scanner/metadata/taglib/taglib.go index 9d22d3946..aa9bea998 100644 --- a/scanner/metadata/taglib/taglib.go +++ b/scanner/metadata/taglib/taglib.go @@ -13,18 +13,16 @@ type parsedTags = map[string][]string func (e *Parser) Parse(paths ...string) (map[string]parsedTags, error) { fileTags := map[string]parsedTags{} for _, path := range paths { - tags, err := e.extractMetadata(path) - if err == nil { - fileTags[path] = tags - } + fileTags[path] = e.extractMetadata(path) } return fileTags, nil } -func (e *Parser) extractMetadata(filePath string) (parsedTags, error) { +func (e *Parser) extractMetadata(filePath string) parsedTags { tags, err := Read(filePath) if err != nil { log.Warn("Error reading metadata from file. Skipping", "filePath", filePath, err) + return nil } alternativeTags := map[string][]string{ @@ -48,5 +46,5 @@ func (e *Parser) extractMetadata(filePath string) (parsedTags, error) { } } } - return tags, nil + return tags } diff --git a/scanner/metadata/taglib/taglib_wrapper.go b/scanner/metadata/taglib/taglib_wrapper.go index 899a95a60..a4db3cc01 100644 --- a/scanner/metadata/taglib/taglib_wrapper.go +++ b/scanner/metadata/taglib/taglib_wrapper.go @@ -20,7 +20,13 @@ import ( "github.com/navidrome/navidrome/log" ) -func Read(filename string) (map[string][]string, error) { +func Read(filename string) (tags map[string][]string, err error) { + defer func() { + if r := recover(); r != nil { + log.Error("TagLib: recovered from panic", "error", r) + err = fmt.Errorf("TagLib: recovered from panic: %s", r) + } + }() fp := getFilename(filename) defer C.free(unsafe.Pointer(fp)) id, m := newMap()