Mercurial > libavcodec.hg
changeset 5816:0168cd384df3 libavcodec
factorize code and add safety check to prevent memcpying negative amounts
author | michael |
---|---|
date | Sat, 13 Oct 2007 09:58:39 +0000 |
parents | fb293531e983 |
children | ced30500e2b1 |
files | aac_ac3_parser.c |
diffstat | 1 files changed, 10 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/aac_ac3_parser.c Sat Oct 13 05:50:11 2007 +0000 +++ b/aac_ac3_parser.c Sat Oct 13 09:58:39 2007 +0000 @@ -37,16 +37,18 @@ buf_ptr = buf; while (buf_size > 0) { + int size_needed= s->frame_size ? s->frame_size : s->header_size; len = s->inbuf_ptr - s->inbuf; + + if(len<size_needed){ + len = FFMIN(size_needed - len, buf_size); + memcpy(s->inbuf_ptr, buf_ptr, len); + buf_ptr += len; + s->inbuf_ptr += len; + buf_size -= len; + } + 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); - - memcpy(s->inbuf_ptr, buf_ptr, len); - buf_ptr += len; - s->inbuf_ptr += len; - buf_size -= len; if ((s->inbuf_ptr - s->inbuf) == s->header_size) { len = s->sync(s->inbuf, &channels, &sample_rate, &bit_rate, &samples); @@ -71,13 +73,6 @@ } } } 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){ *poutbuf = s->inbuf; *poutbuf_size = s->frame_size;