diff options
-rw-r--r-- | src/tag/Id3Load.cxx | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/tag/Id3Load.cxx b/src/tag/Id3Load.cxx index 95769084c..bcbac35ba 100644 --- a/src/tag/Id3Load.cxx +++ b/src/tag/Id3Load.cxx @@ -138,11 +138,15 @@ tag_id3_find_from_beginning(FILE *stream) static UniqueId3Tag tag_id3_find_from_end(FILE *stream) { + off_t offset = -(off_t)ID3V1_SIZE; + /* Get an id3v1 tag from the end of file for later use */ - auto v1tag = tag_id3_read(stream, -(off_t)ID3V1_SIZE, SEEK_END); + auto v1tag = tag_id3_read(stream, offset, SEEK_END); + if (!v1tag) + offset = 0; /* Get the id3v2 tag size from the footer (located before v1tag) */ - int tagsize = get_id3v2_footer_size(stream, (v1tag ? -(off_t)ID3V1_SIZE : 0) - ID3_TAG_QUERYSIZE, SEEK_END); + int tagsize = get_id3v2_footer_size(stream, offset - ID3_TAG_QUERYSIZE, SEEK_END); if (tagsize >= 0) return v1tag; |