On Wed, Oct 26, 2011 at 04:18:32PM -0400, Justin Ruggles wrote:
> The pointer address could overflow, which would likely segfault. Instead set
> the context error flag to indicate that the decoder tried to read past the
> end of the packet data.
> ---
>  libavcodec/apedec.c |    9 ++++++---
>  1 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
> index 67304bc..63b2e32 100644
> --- a/libavcodec/apedec.c
> +++ b/libavcodec/apedec.c
> @@ -247,9 +247,12 @@ static inline void range_dec_normalize(APEContext *ctx)
>  {
>      while (ctx->rc.range <= BOTTOM_VALUE) {
>          ctx->rc.buffer <<= 8;
> -        if(ctx->ptr < ctx->data_end)
> +        if(ctx->ptr < ctx->data_end) {
>              ctx->rc.buffer += *ctx->ptr;
> -        ctx->ptr++;
> +            ctx->ptr++;
> +        } else {
> +            ctx->error = 1;
> +        }
>          ctx->rc.low    = (ctx->rc.low << 8)    | ((ctx->rc.buffer >> 1) & 
> 0xFF);
>          ctx->rc.range  <<= 8;
>      }
> @@ -893,7 +896,7 @@ static int ape_decode_frame(AVCodecContext *avctx,
>          ape_unpack_stereo(s, blockstodecode);
>      emms_c();
>  
> -    if(s->error || s->ptr > s->data_end){
> +    if (s->error) {
>          s->samples=0;
>          av_log(avctx, AV_LOG_ERROR, "Error decoding frame\n");
>          return AVERROR_INVALIDDATA;
> -- 

looks OK
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to