diff options
author | 2010-08-22 21:10:14 +0200 | |
---|---|---|
committer | 2010-08-22 21:10:14 +0200 | |
commit | 3b408021472d18d229e16860116ec88c4f25cb5a (patch) | |
tree | 89438b8444b19832ca348fdfa91fb20427a6779b | |
parent | 88d3b2a412763a56ad762da2cb5af55dc6cf47cb (diff) |
added mp4 frame bounds checking
-rw-r--r-- | plugins/aac/aac.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/plugins/aac/aac.c b/plugins/aac/aac.c index 2352addd..ecc283b3 100644 --- a/plugins/aac/aac.c +++ b/plugins/aac/aac.c @@ -63,6 +63,7 @@ typedef struct { int32_t timescale; u_int32_t maxSampleSize; int mp4track; + int mp4samples; int mp4sample; int mp4framesize; int skipsamples; @@ -422,7 +423,8 @@ aac_init (DB_fileinfo_t *_info, DB_playItem_t *it) { { trace ("mp4 track: %d\n", i); int samples = mp4ff_num_samples(info->mp4file, i); - trace ("mp4 nsamples=%d, samplerate=%d\n", samples * 1024, samplerate); + info->mp4samples = samples; + trace ("mp4 mp4samples=%d, nsamples=%d, samplerate=%d\n", samples, samples * 1024, samplerate); totalsamples = samples; info->mp4track = i; @@ -713,6 +715,9 @@ aac_read_int16 (DB_fileinfo_t *_info, char *bytes, int size) { u_int64_t myDuration = MP4ConvertFromTrackDuration (info->mp4file, info->mp4track, sampleDuration, MP4_MSECS_TIME_SCALE); #endif + if (info->mp4sample >= info->mp4samples) { + break; + } info->mp4sample++; samples = NeAACDecDecode(info->dec, &frame_info, buffer, buffer_size); #ifdef USE_MP4FF |