tag/{aiff,riff}: fix ID3 chunk padding

Apply padding only to the fseek(), not to the chunk size.  This fixes
bogus "failed to read riff chunk" messages when the last chunk has an
odd size.

See http://bugs.musicpd.org/view.php?id=4486
This commit is contained in:
Max Kellermann 2016-02-19 17:31:20 +01:00
parent 81e7833711
commit 4abcb08cc9
3 changed files with 10 additions and 8 deletions

2
NEWS
View File

@ -1,4 +1,6 @@
ver 0.19.13 (not yet released)
* tags
- aiff, riff: fix ID3 chunk padding
ver 0.19.12 (2015/12/15)
* fix assertion failure on malformed UTF-8 tag

View File

@ -84,14 +84,14 @@ aiff_seek_id3(FILE *file)
underflow when casting to off_t */
return 0;
if (size % 2 != 0)
/* pad byte */
++size;
if (memcmp(chunk.id, "ID3 ", 4) == 0)
/* found it! */
return size;
if (size % 2 != 0)
/* pad byte */
++size;
if (fseek(file, size, SEEK_CUR) != 0)
return 0;
}

View File

@ -82,15 +82,15 @@ riff_seek_id3(FILE *file)
underflow when casting to off_t */
return 0;
if (size % 2 != 0)
/* pad byte */
++size;
if (memcmp(chunk.id, "id3 ", 4) == 0 ||
memcmp(chunk.id, "ID3 ", 4) == 0)
/* found it! */
return size;
if (size % 2 != 0)
/* pad byte */
++size;
if (fseek(file, size, SEEK_CUR) != 0)
return 0;
}