aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-05-17 19:07:17 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-05-21 20:43:39 +0200
commit8b95fc6d8dcc6509bd2b3067508c034b0b6effbd (patch)
tree82b77cf6e5cb708fcb3a3941dea484ea31f9b926 /libavcodec
parent10b77a34714838beaf0361da64dd85c842960604 (diff)
downloadffmpeg-8b95fc6d8dcc6509bd2b3067508c034b0b6effbd.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>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/golomb.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h
index 81d8aeef9e..a65c17e326 100644
--- a/libavcodec/golomb.h
+++ b/libavcodec/golomb.h
@@ -346,8 +346,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;
}