mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-17 04:22:23 +03:00
Recover from any possible taglib panics. Fixes #1343
This commit is contained in:
parent
7a15ed0740
commit
76bd20e8ff
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user