Recover from SIGSEGVs in taglib's code
This commit is contained in:
parent
cbeaadf8e2
commit
0714f08274
1 changed files with 4 additions and 0 deletions
|
|
@ -12,6 +12,7 @@ package taglib
|
||||||
import "C"
|
import "C"
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime/debug"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
@ -21,12 +22,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func Read(filename string) (tags map[string][]string, err error) {
|
func Read(filename string) (tags map[string][]string, err error) {
|
||||||
|
// Do not crash on failures in the C code/library
|
||||||
|
debug.SetPanicOnFault(true)
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
log.Error("TagLib: recovered from panic when reading tags", "file", filename, "error", r)
|
log.Error("TagLib: recovered from panic when reading tags", "file", filename, "error", r)
|
||||||
err = fmt.Errorf("TagLib: recovered from panic: %s", r)
|
err = fmt.Errorf("TagLib: recovered from panic: %s", r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
fp := getFilename(filename)
|
fp := getFilename(filename)
|
||||||
defer C.free(unsafe.Pointer(fp))
|
defer C.free(unsafe.Pointer(fp))
|
||||||
id, m := newMap()
|
id, m := newMap()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue