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 fa6fa2162b
)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -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){
|
||||
|
Reference in New Issue
Block a user