diff --git a/libavformat/apetag.c b/libavformat/apetag.c index e5c839ea34da28cae3d5f260e45b9c78a0521995..f8653d3ce71ded709d5eb6f579ea32b70e7add4c 100644 --- a/libavformat/apetag.c +++ b/libavformat/apetag.c @@ -59,7 +59,12 @@ static int ape_tag_read_field(AVFormatContext *s) AVStream *st = avformat_new_stream(s, NULL); if (!st) return AVERROR(ENOMEM); - avio_get_str(pb, size, filename, sizeof(filename)); + + size -= avio_get_str(pb, size, filename, sizeof(filename)); + if (size <= 0) { + av_log(s, AV_LOG_WARNING, "Skipping binary tag '%s'.\n", key); + return 0; + } st->codec->extradata = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); if (!st->codec->extradata) return AVERROR(ENOMEM);