[FFmpeg-devel] [PATCH 1/2] aadec: improve eof detection
Michael Niedermayer
michael at niedermayer.cc
Sun Jan 28 06:10:57 EET 2018
On Sun, Jan 28, 2018 at 12:01:13AM +0100, Karsten Otto wrote:
> Remember the end position of audio content in the file and check it during
> read_packet. There always seems to be other data beyond it, which could be
> misinterpreted as more audio. Also add some extra avio_read error checks,
> to bail early in case of a broken/truncated file.
> ---
> libavformat/aadec.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/aadec.c b/libavformat/aadec.c
> index 8d39b1d9ba..d6b6c125da 100644
> --- a/libavformat/aadec.c
> +++ b/libavformat/aadec.c
> @@ -46,6 +46,7 @@ typedef struct AADemuxContext {
> struct AVTEA *tea_ctx;
> uint8_t file_key[16];
> int64_t current_chapter_size;
> + int64_t content_end;
> } AADemuxContext;
>
> static int get_second_size(char *codec_name)
> @@ -197,6 +198,7 @@ static int aa_read_header(AVFormatContext *s)
> }
> start = TOC[largest_idx].offset;
> avio_seek(pb, start, SEEK_SET);
> + c->content_end = start + largest_size;
> c->current_chapter_size = 0;
>
> return 0;
> @@ -214,6 +216,11 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt)
> int ret;
> AADemuxContext *c = s->priv_data;
>
> + // are we at the end of the audio content?
> + if (avio_tell(s->pb) >= c->content_end) {
> + return AVERROR_EOF;
> + }
> +
> // are we at the start of a chapter?
> if (c->current_chapter_size == 0) {
> c->current_chapter_size = avio_rb32(s->pb);
> @@ -234,7 +241,7 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt)
> // decrypt c->current_codec_second_size bytes
> blocks = c->current_codec_second_size / TEA_BLOCK_SIZE;
> for (i = 0; i < blocks; i++) {
> - avio_read(s->pb, src, TEA_BLOCK_SIZE);
> + if (avio_read(s->pb, src, TEA_BLOCK_SIZE) < 0) return AVERROR_EOF;
I suspect this should forward the error code or the test should be
for != TEA_BLOCK_SIZE
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Does the universe only have a finite lifespan? No, its going to go on
forever, its just that you wont like living in it. -- Hiranya Peiri
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180128/e17a4822/attachment.sig>
More information about the ffmpeg-devel
mailing list