diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-10-31 10:54:46 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-11-17 19:11:07 +0100 |
commit | e40d01f45dfd34e8294a39b16a5c4f5d73a81fb6 (patch) | |
tree | d3b827677c4cd063a6302b665bc88aa88b6cf43e /libavcodec/cabac_functions.h | |
parent | 51d1e79cc18f820281aefbbb10f3e7d8e2561d2e (diff) | |
download | ffmpeg-e40d01f45dfd34e8294a39b16a5c4f5d73a81fb6.tar.gz |
avcodec/cabac: support UNCHECKED_BITSTREAM_READER = 0
Fixes overreads in HEVC
Fixes Ticket3070
Also fixed remaining issues from Ticket3075 and Ticket3076
Some lines of code taken from 0c5f839693da2276c2da23400f67a67be4ea0af1:libavcodec/x86/cabac.h
and 0c5f839693da2276c2da23400f67a67be4ea0af1:libavcodec/cabac_functions.h
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit fa6fa2162b730336fc1d6ee0d547dcc81f4afbad)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/cabac_functions.h')
-rw-r--r-- | libavcodec/cabac_functions.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libavcodec/cabac_functions.h b/libavcodec/cabac_functions.h index b84258bfa7..7e22064d06 100644 --- a/libavcodec/cabac_functions.h +++ b/libavcodec/cabac_functions.h @@ -49,7 +49,10 @@ static void refill(CABACContext *c){ c->low+= c->bytestream[0]<<1; #endif c->low -= CABAC_MASK; - c->bytestream += CABAC_BITS / 8; +#if !UNCHECKED_BITSTREAM_READER + if (c->bytestream < c->bytestream_end) +#endif + c->bytestream += CABAC_BITS / 8; } static inline void renorm_cabac_decoder_once(CABACContext *c){ @@ -76,7 +79,10 @@ static void refill2(CABACContext *c){ #endif c->low += x<<i; - c->bytestream += CABAC_BITS/8; +#if !UNCHECKED_BITSTREAM_READER + if (c->bytestream < c->bytestream_end) +#endif + c->bytestream += CABAC_BITS/8; } static av_always_inline int get_cabac_inline(CABACContext *c, uint8_t * const state){ |