ref: 8eef69ee71be395e0a2327501059986d782fc348
parent: f07984fc62846eb61f12b3c01a86e31f8a71f2d8
author: lieff <lieff@users.noreply.github.com>
date: Thu Feb 27 22:25:17 EST 2020
mp3dec_ex: skip full apetag + test
--- a/minimp3_ex.h
+++ b/minimp3_ex.h
@@ -118,10 +118,10 @@
{
size_t buf_size = *pbuf_size;
#ifndef MINIMP3_NOSKIP_ID3V1
- if (buf_size > 128 && !memcmp(buf + buf_size - 128, "TAG", 3))
+ if (buf_size >= 128 && !memcmp(buf + buf_size - 128, "TAG", 3))
{
buf_size -= 128;
- if (buf_size > 227 && !memcmp(buf + buf_size - 227, "TAG+", 4))
+ if (buf_size >= 227 && !memcmp(buf + buf_size - 227, "TAG+", 4))
buf_size -= 227;
}
#endif
@@ -129,6 +129,10 @@
if (buf_size > 32 && !memcmp(buf + buf_size - 32, "APETAGEX", 8))
{
buf_size -= 32;
+ const uint8_t *tag = buf + buf_size + 8 + 4;
+ uint32_t tag_size = (uint32_t)(tag[3] << 24) | (tag[2] << 16) | (tag[1] << 8) | tag[0];
+ if (buf_size >= tag_size)
+ buf_size -= tag_size;
}
#endif
*pbuf_size = buf_size;
binary files /dev/null b/vectors/l3-nonstandard-apetag.bit differ
binary files /dev/null b/vectors/l3-nonstandard-apetag.pcm differ