diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-05-17 19:07:17 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-07-20 04:43:38 +0200 |
commit | 3bb17d2692cd790a7213d49f59032b6810e16a02 (patch) | |
tree | 687aa0ba84dc0e9176bf7cf7c0c3248b5b7c2ae2 | |
parent | a5e18e900f7d699aec0709adaa8f40f6e02f751c (diff) | |
download | ffmpeg-3bb17d2692cd790a7213d49f59032b6810e16a02.tar.gz |
avcodec/golomb: get_ur_golomb_jpegls: Fix reading huge k values
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c720b9ce9850710e74a103d9626869e397a89faa)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/golomb.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index 1632ee37cc..8976bd8e92 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -337,8 +337,16 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, if (i < limit - 1) { if (k) { - buf = SHOW_UBITS(re, gb, k); - LAST_SKIP_BITS(re, gb, k); + if (k > MIN_CACHE_BITS - 1) { + buf = SHOW_UBITS(re, gb, 16) << (k-16); + LAST_SKIP_BITS(re, gb, 16); + UPDATE_CACHE(re, gb); + buf |= SHOW_UBITS(re, gb, k-16); + LAST_SKIP_BITS(re, gb, k-16); + } else { + buf = SHOW_UBITS(re, gb, k); + LAST_SKIP_BITS(re, gb, k); + } } else { buf = 0; } |