From 05c9a3fa59d191797cf9fa682a574babde5ec65b Mon Sep 17 00:00:00 2001 From: Xavier Henner Date: Sun, 5 Jul 2015 23:03:02 +0200 Subject: [PATCH] Be a little less strict on invalid frames Add iTunes frames and ignore unknown frame only if they are too big --- id3v2.go | 10 +++++----- id3v2frames.go | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/id3v2.go b/id3v2.go index bf1b20f..f504b61 100644 --- a/id3v2.go +++ b/id3v2.go @@ -219,11 +219,6 @@ func readID3v2Frames(r io.Reader, h *id3v2Header) (map[string]interface{}, error return nil, err } - // Avoid corrupted padding (see http://id3.org/Compliance%20Issues). - if !validID3Frame(h.Version, name) { - break - } - // FIXME: Do we still need this? // if size=0, we certainly are in a padding zone. ignore the rest of // the tags @@ -233,6 +228,11 @@ func readID3v2Frames(r io.Reader, h *id3v2Header) (map[string]interface{}, error offset += headerSize + size + // Avoid corrupted padding (see http://id3.org/Compliance%20Issues). + if !validID3Frame(h.Version, name) && offset > h.Size { + break + } + if flags != nil { if flags.Compression { _, err = read7BitChunkedInt(r, 4) // read 4 diff --git a/id3v2frames.go b/id3v2frames.go index 89903e2..5e1d058 100644 --- a/id3v2frames.go +++ b/id3v2frames.go @@ -119,6 +119,7 @@ var id3v23Frames = map[string]string{ "SYTC": "Synchronized tempo codes", "TALB": "Album/Movie/Show title", "TBPM": "BPM (beats per minute)", + "TCMP": "iTunes Compilation Flag", "TCOM": "Composer", "TCON": "Content type", "TCOP": "Copyright message", @@ -152,6 +153,8 @@ var id3v23Frames = map[string]string{ "TRSN": "Internet radio station name", "TRSO": "Internet radio station owner", "TSIZ": "Size", + "TSO2": "iTunes uses this for Album Artist sort order", + "TSOC": "iTunes uses this for Composer sort order", "TSRC": "ISRC (international standard recording code)", "TSSE": "Software/Hardware and settings used for encoding", "TYER": "Year", @@ -209,6 +212,7 @@ var id3v24Frames = map[string]string{ "TALB": "Album/Movie/Show title", "TBPM": "BPM (beats per minute)", + "TCMP": "iTunes Compilation Flag", "TCOM": "Composer", "TCON": "Content type", "TCOP": "Copyright message", @@ -246,7 +250,9 @@ var id3v24Frames = map[string]string{ "TRCK": "Track number/Position in set", "TRSN": "Internet radio station name", "TRSO": "Internet radio station owner", + "TSO2": "iTunes uses this for Album Artist sort order", "TSOA": "Album sort order", + "TSOC": "iTunes uses this for Composer sort order", "TSOP": "Performer sort order", "TSOT": "Title sort order", "TSRC": "ISRC (international standard recording code)",