On Mon, Oct 24, 2011 at 01:34:55PM -0400, Justin Ruggles wrote:
> using a floating-point calculation is not necessary.
> ---
>  libavcodec/tta.c |   13 ++++++-------
>  1 files changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/libavcodec/tta.c b/libavcodec/tta.c
> index b7b20e4..ddfcb2e 100644
> --- a/libavcodec/tta.c
> +++ b/libavcodec/tta.c
> @@ -217,10 +217,6 @@ static av_cold int tta_decode_init(AVCodecContext * 
> avctx)
>          avctx->bits_per_coded_sample = get_bits(&s->gb, 16);
>          s->bps = (avctx->bits_per_coded_sample + 7) / 8;
>          avctx->sample_rate = get_bits_long(&s->gb, 32);
> -        if(avctx->sample_rate > 1000000){ //prevent FRAME_TIME * 
> avctx->sample_rate from overflowing and sanity check
> -            av_log(avctx, AV_LOG_ERROR, "sample_rate too large\n");
> -            return -1;
> -        }
>          s->data_length = get_bits_long(&s->gb, 32);
>          skip_bits(&s->gb, 32); // CRC32 of header
>  
> @@ -238,9 +234,12 @@ static av_cold int tta_decode_init(AVCodecContext * 
> avctx)
>              return AVERROR_INVALIDDATA;
>          }
>  
> -        // FIXME: horribly broken, but directly from reference source
> -#define FRAME_TIME 1.04489795918367346939
> -        s->frame_length = (int)(FRAME_TIME * avctx->sample_rate);
> +        // prevent overflow
> +        if (avctx->sample_rate > 0x7FFFFF) {
> +            av_log(avctx, AV_LOG_ERROR, "sample_rate too large\n");
> +            return AVERROR(EINVAL);
> +        }
> +        s->frame_length = 256 * avctx->sample_rate / 245;
>  
>          s->last_frame_length = s->data_length % s->frame_length;
>          s->total_frames = s->data_length / s->frame_length +
> -- 

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

Reply via email to