Commit 1ec0ba78 authored by michael's avatar michael

factorize code and add saftey check to prevent memcpying negative amounts


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10722 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 03aaf2b8
...@@ -37,16 +37,18 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, ...@@ -37,16 +37,18 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1,
buf_ptr = buf; buf_ptr = buf;
while (buf_size > 0) { while (buf_size > 0) {
int size_needed= s->frame_size ? s->frame_size : s->header_size;
len = s->inbuf_ptr - s->inbuf; len = s->inbuf_ptr - s->inbuf;
if (s->frame_size == 0) {
/* no header seen : find one. We need at least s->header_size
bytes to parse it */
len = FFMIN(s->header_size - len, buf_size);
if(len<size_needed){
len = FFMIN(size_needed - len, buf_size);
memcpy(s->inbuf_ptr, buf_ptr, len); memcpy(s->inbuf_ptr, buf_ptr, len);
buf_ptr += len; buf_ptr += len;
s->inbuf_ptr += len; s->inbuf_ptr += len;
buf_size -= len; buf_size -= len;
}
if (s->frame_size == 0) {
if ((s->inbuf_ptr - s->inbuf) == s->header_size) { if ((s->inbuf_ptr - s->inbuf) == s->header_size) {
len = s->sync(s->inbuf, &channels, &sample_rate, &bit_rate, len = s->sync(s->inbuf, &channels, &sample_rate, &bit_rate,
&samples); &samples);
...@@ -71,13 +73,6 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, ...@@ -71,13 +73,6 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1,
} }
} }
} else { } else {
len = FFMIN(s->frame_size - len, buf_size);
memcpy(s->inbuf_ptr, buf_ptr, len);
buf_ptr += len;
s->inbuf_ptr += len;
buf_size -= len;
if(s->inbuf_ptr - s->inbuf == s->frame_size){ if(s->inbuf_ptr - s->inbuf == s->frame_size){
*poutbuf = s->inbuf; *poutbuf = s->inbuf;
*poutbuf_size = s->frame_size; *poutbuf_size = s->frame_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment