diff --git a/id3v2.go b/id3v2.go index d4c6838..cb6c662 100644 --- a/id3v2.go +++ b/id3v2.go @@ -363,7 +363,7 @@ func readID3v2Frames(r io.Reader, offset uint, h *id3v2Header) (map[string]inter case name == "COMM" || name == "COM" || name == "USLT" || name == "ULT": t, err := readTextWithDescrFrame(b, true, true) // both lang and enc if err != nil { - return nil, err + return nil, fmt.Errorf("could not read %q (%q): %v", name, rawName, err) } result[rawName] = t diff --git a/id3v2frames.go b/id3v2frames.go index a92afa1..569a609 100644 --- a/id3v2frames.go +++ b/id3v2frames.go @@ -457,6 +457,9 @@ func readTextWithDescrFrame(b []byte, hasLang bool, encoded bool) (*Comm, error) c := &Comm{} if hasLang { + if len(b) < 3 { + return nil, fmt.Errorf("hasLang set but not enough data for language information") + } c.Language = string(b[:3]) b = b[3:] }