summaryrefslogtreecommitdiff
path: root/libavcodec/cabac_functions.h
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-10-31 10:54:46 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-10-31 11:13:27 +0100
commitfa6fa2162b730336fc1d6ee0d547dcc81f4afbad (patch)
treeb174e1b759455fe62ff7d3e8c122258fc33a3557 /libavcodec/cabac_functions.h
parent7c8b65f688ea75496e278b7c042f2eda746f3eac (diff)
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>
Diffstat (limited to 'libavcodec/cabac_functions.h')
-rw-r--r--libavcodec/cabac_functions.h10
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){