On Sat, Jun 03, 2017 at 06:14:12PM -0300, James Almer wrote: > On 6/3/2017 5:16 PM, Michael Niedermayer wrote: > > On Sat, Jun 03, 2017 at 12:33:33AM -0300, James Almer wrote: > >> Atempt to read and propagate only full ADTS frames and not other data, > >> like id3v1 or APETags at the end of the file. > >> > >> Fixes ticket #6439. > >> > >> Signed-off-by: James Almer <jamr...@gmail.com> > >> --- > >> libavformat/aacdec.c | 42 ++++++++++++++++++++++++++++++++++++++++-- > >> 1 file changed, 40 insertions(+), 2 deletions(-) > >> > >> diff --git a/libavformat/aacdec.c b/libavformat/aacdec.c > >> index 5ab5197e33..aee1efe03c 100644 > >> --- a/libavformat/aacdec.c > >> +++ b/libavformat/aacdec.c > >> @@ -23,10 +23,11 @@ > >> #include "libavutil/intreadwrite.h" > >> #include "avformat.h" > >> #include "internal.h" > >> -#include "rawdec.h" > >> #include "id3v1.h" > >> #include "apetag.h" > >> > >> +#define ADTS_HEADER_SIZE 7 > >> + > >> static int adts_aac_probe(AVProbeData *p) > >> { > >> int max_frames = 0, first_frames = 0; > >> @@ -79,6 +80,7 @@ static int adts_aac_probe(AVProbeData *p) > >> static int adts_aac_read_header(AVFormatContext *s) > >> { > >> AVStream *st; > >> + uint16_t state; > >> > >> st = avformat_new_stream(s, NULL); > >> if (!st) > >> @@ -96,18 +98,54 @@ static int adts_aac_read_header(AVFormatContext *s) > >> avio_seek(s->pb, cur, SEEK_SET); > >> } > >> > >> + // skip data until the first ADTS frame is found > >> + state = avio_r8(s->pb); > >> + while (!avio_feof(s->pb)) { > >> + state = (state << 8) | avio_r8(s->pb); > >> + if ((state >> 4) != 0xFFF) > >> + continue; > >> + avio_seek(s->pb, -2, SEEK_CUR); > >> + break; > >> + } > > > > this would loop forever with /dev/zero as input > > How can i prevent this? Maybe checking a max of > AVFormatContext.probesize or AVFormatContext.format_probesize bytes > before bailing out? Which one if so?
id tend toward probesize, but anything will do. thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I know you won't believe me, but the highest form of Human Excellence is to question oneself and others. -- Socrates
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel