On 07/10/2012 12:51 PM, Alex Converse wrote: > On Tue, Jul 10, 2012 at 4:24 AM, Justin Ruggles > <justin.rugg...@gmail.com> wrote: >> On 07/09/2012 07:14 PM, Alex Converse wrote: >>> On Mon, Jul 9, 2012 at 2:24 PM, Justin Ruggles <justin.rugg...@gmail.com> >>> wrote: >>>> allows for a larger sample size than MIN_CACHE_BITS >>>> --- >>>> libavcodec/alac.c | 9 ++------- >>>> 1 files changed, 2 insertions(+), 7 deletions(-) >>>> >>>> diff --git a/libavcodec/alac.c b/libavcodec/alac.c >>>> index 5f2c8a0..0e62adb 100644 >>>> --- a/libavcodec/alac.c >>>> +++ b/libavcodec/alac.c >>>> @@ -84,7 +84,7 @@ static inline int decode_scalar(GetBitContext *gb, int >>>> k, int readsamplesize) >>>> >>>> if (x > 8) { /* RICE THRESHOLD */ >>>> /* use alternative encoding */ >>>> - x = get_bits(gb, readsamplesize); >>>> + x = get_bits_long(gb, readsamplesize); >>>> } else if (k != 1) { >>>> int extrabits = show_bits(gb, k); >>>> >>>> @@ -294,6 +294,7 @@ static int alac_decode_frame(AVCodecContext *avctx, >>>> void *data, >>>> hassize = get_bits1(&alac->gb); >>>> >>>> alac->extra_bits = get_bits(&alac->gb, 2) << 3; >>>> + readsamplesize = alac->sample_size - alac->extra_bits + channels - 1; >>>> >>>> /* whether the frame is compressed */ >>>> is_compressed = !get_bits1(&alac->gb); >>>> @@ -321,12 +322,6 @@ static int alac_decode_frame(AVCodecContext *avctx, >>>> void *data, >>>> alac->output_samples_buffer[ch] = (int32_t >>>> *)alac->frame.data[ch]; >>>> } >>>> >>>> - readsamplesize = alac->sample_size - alac->extra_bits + channels - 1; >>>> - if (readsamplesize > MIN_CACHE_BITS) { >>>> - av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", >>>> readsamplesize); >>>> - return -1; >>>> - } >>>> - >>> >>> What about the case where sample_size = 32, channels = 6, and >>> extra_bits is 0? It seems possible and results in readsamplesize = 37 >>> which is still too big. >> >> Yeah, I suppose we should check for that case. In practice it won't >> happen though. For one thing, channels cannot be 6 here. It's 1 or 2 >> because it is per-element. The most it could be is 33. The reference >> alac encoder uses 16 extra bits for 32-bit, so it's really only a >> theoretical problem. I'll send an updated patch that handles the corner >> cases. >> > > Just to be clear, I'm not proposing you need to handle cases where > it's more than 32 bits, only that you error out if the bitstream gives > you that value.
Yeah, that's what I meant by handle. my latest patch errors out when it's more than 32 bits. -Justin _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel