@@ -49,7 +49,7 @@ typedef struct Escape124Context { | |||||
} Escape124Context; | } Escape124Context; | ||||
static int can_safely_read(GetBitContext* gb, int bits) { | static int can_safely_read(GetBitContext* gb, int bits) { | ||||
return get_bits_count(gb) + bits <= gb->size_in_bits; | |||||
return get_bits_left(gb) >= bits; | |||||
} | } | ||||
/** | /** | ||||
@@ -265,7 +265,7 @@ static int h261_decode_mb(H261Context *h){ | |||||
while( h->mba_diff == MBA_STUFFING ); // stuffing | while( h->mba_diff == MBA_STUFFING ); // stuffing | ||||
if ( h->mba_diff < 0 ){ | if ( h->mba_diff < 0 ){ | ||||
if ( get_bits_count(&s->gb) + 7 >= s->gb.size_in_bits ) | |||||
if (get_bits_left(&s->gb) <= 7) | |||||
return SLICE_END; | return SLICE_END; | ||||
av_log(s->avctx, AV_LOG_ERROR, "illegal mba at %d %d\n", s->mb_x, s->mb_y); | av_log(s->avctx, AV_LOG_ERROR, "illegal mba at %d %d\n", s->mb_x, s->mb_y); | ||||
@@ -650,7 +650,7 @@ retry: | |||||
ret = decode_slice(s); | ret = decode_slice(s); | ||||
while(s->mb_y<s->mb_height){ | while(s->mb_y<s->mb_height){ | ||||
if(s->msmpeg4_version){ | if(s->msmpeg4_version){ | ||||
if(s->slice_height==0 || s->mb_x!=0 || (s->mb_y%s->slice_height)!=0 || get_bits_count(&s->gb) > s->gb.size_in_bits) | |||||
if(s->slice_height==0 || s->mb_x!=0 || (s->mb_y%s->slice_height)!=0 || get_bits_left(&s->gb)<0) | |||||
break; | break; | ||||
}else{ | }else{ | ||||
int prev_x=s->mb_x, prev_y=s->mb_y; | int prev_x=s->mb_x, prev_y=s->mb_y; | ||||
@@ -3667,7 +3667,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){ | |||||
if(s->mb_y >= s->mb_height){ | if(s->mb_y >= s->mb_height){ | ||||
tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); | tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); | ||||
if(get_bits_count(&s->gb) == s->gb.size_in_bits ) { | |||||
if (get_bits_left(&s->gb) == 0) { | |||||
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_MB_END&part_mask); | ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_MB_END&part_mask); | ||||
return 0; | return 0; | ||||
@@ -3679,9 +3679,9 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){ | |||||
} | } | ||||
} | } | ||||
if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->mb_skip_run<=0){ | |||||
if (get_bits_left(&s->gb) <= 0 && s->mb_skip_run <= 0){ | |||||
tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); | tprintf(s->avctx, "slice end %d %d\n", get_bits_count(&s->gb), s->gb.size_in_bits); | ||||
if(get_bits_count(&s->gb) == s->gb.size_in_bits ){ | |||||
if (get_bits_left(&s->gb) == 0) { | |||||
ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_MB_END&part_mask); | ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, ER_MB_END&part_mask); | ||||
if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x); | if (s->mb_x > lf_x_start) loop_filter(h, lf_x_start, s->mb_x); | ||||
@@ -227,8 +227,8 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){ | |||||
sps->num_reorder_frames= get_ue_golomb(&s->gb); | sps->num_reorder_frames= get_ue_golomb(&s->gb); | ||||
get_ue_golomb(&s->gb); /*max_dec_frame_buffering*/ | get_ue_golomb(&s->gb); /*max_dec_frame_buffering*/ | ||||
if(s->gb.size_in_bits < get_bits_count(&s->gb)){ | |||||
av_log(h->s.avctx, AV_LOG_ERROR, "Overread VUI by %d bits\n", get_bits_count(&s->gb) - s->gb.size_in_bits); | |||||
if (get_bits_left(&s->gb) < 0) { | |||||
av_log(h->s.avctx, AV_LOG_ERROR, "Overread VUI by %d bits\n", -get_bits_left(&s->gb)); | |||||
sps->num_reorder_frames=0; | sps->num_reorder_frames=0; | ||||
sps->bitstream_restriction_flag= 0; | sps->bitstream_restriction_flag= 0; | ||||
} | } | ||||
@@ -164,7 +164,7 @@ static int decode_buffering_period(H264Context *h){ | |||||
int ff_h264_decode_sei(H264Context *h){ | int ff_h264_decode_sei(H264Context *h){ | ||||
MpegEncContext * const s = &h->s; | MpegEncContext * const s = &h->s; | ||||
while(get_bits_count(&s->gb) + 16 < s->gb.size_in_bits){ | |||||
while (get_bits_left(&s->gb) > 16) { | |||||
int size, type; | int size, type; | ||||
type=0; | type=0; | ||||
@@ -718,7 +718,7 @@ static void decode_422_bitstream(HYuvContext *s, int count){ | |||||
count/=2; | count/=2; | ||||
if(count >= (get_bits_left(&s->gb))/(31*4)){ | if(count >= (get_bits_left(&s->gb))/(31*4)){ | ||||
for(i=0; i<count && get_bits_count(&s->gb) < s->gb.size_in_bits; i++){ | |||||
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) { | |||||
READ_2PIX(s->temp[0][2*i ], s->temp[1][i], 1); | READ_2PIX(s->temp[0][2*i ], s->temp[1][i], 1); | ||||
READ_2PIX(s->temp[0][2*i+1], s->temp[2][i], 2); | READ_2PIX(s->temp[0][2*i+1], s->temp[2][i], 2); | ||||
} | } | ||||
@@ -736,7 +736,7 @@ static void decode_gray_bitstream(HYuvContext *s, int count){ | |||||
count/=2; | count/=2; | ||||
if(count >= (get_bits_left(&s->gb))/(31*2)){ | if(count >= (get_bits_left(&s->gb))/(31*2)){ | ||||
for(i=0; i<count && get_bits_count(&s->gb) < s->gb.size_in_bits; i++){ | |||||
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) { | |||||
READ_2PIX(s->temp[0][2*i ], s->temp[0][2*i+1], 0); | READ_2PIX(s->temp[0][2*i ], s->temp[0][2*i+1], 0); | ||||
} | } | ||||
}else{ | }else{ | ||||
@@ -852,8 +852,8 @@ end: | |||||
{ | { | ||||
int v= show_bits(&s->gb, 16); | int v= show_bits(&s->gb, 16); | ||||
if(get_bits_count(&s->gb) + 16 > s->gb.size_in_bits){ | |||||
v>>= get_bits_count(&s->gb) + 16 - s->gb.size_in_bits; | |||||
if (get_bits_left(&s->gb) < 16) { | |||||
v >>= 16 - get_bits_left(&s->gb); | |||||
} | } | ||||
if(v==0) | if(v==0) | ||||
@@ -854,9 +854,9 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, | |||||
if (s->restart_interval && !s->restart_count) | if (s->restart_interval && !s->restart_count) | ||||
s->restart_count = s->restart_interval; | s->restart_count = s->restart_interval; | ||||
if (get_bits_count(&s->gb)>s->gb.size_in_bits) { | |||||
if (get_bits_left(&s->gb) < 0) { | |||||
av_log(s->avctx, AV_LOG_ERROR, "overread %d\n", | av_log(s->avctx, AV_LOG_ERROR, "overread %d\n", | ||||
get_bits_count(&s->gb) - s->gb.size_in_bits); | |||||
-get_bits_left(&s->gb)); | |||||
return -1; | return -1; | ||||
} | } | ||||
for (i = 0; i < nb_components; i++) { | for (i = 0; i < nb_components; i++) { | ||||
@@ -1147,7 +1147,7 @@ static int mjpeg_decode_app(MJpegDecodeContext *s) | |||||
len = get_bits(&s->gb, 16); | len = get_bits(&s->gb, 16); | ||||
if (len < 5) | if (len < 5) | ||||
return -1; | return -1; | ||||
if (8 * len + get_bits_count(&s->gb) > s->gb.size_in_bits) | |||||
if (8 * len > get_bits_left(&s->gb)) | |||||
return -1; | return -1; | ||||
id = get_bits_long(&s->gb, 32); | id = get_bits_long(&s->gb, 32); | ||||
@@ -1288,8 +1288,7 @@ out: | |||||
static int mjpeg_decode_com(MJpegDecodeContext *s) | static int mjpeg_decode_com(MJpegDecodeContext *s) | ||||
{ | { | ||||
int len = get_bits(&s->gb, 16); | int len = get_bits(&s->gb, 16); | ||||
if (len >= 2 && | |||||
8 * len - 16 + get_bits_count(&s->gb) <= s->gb.size_in_bits) { | |||||
if (len >= 2 && 8 * len - 16 <= get_bits_left(&s->gb)) { | |||||
char *cbuf = av_malloc(len - 1); | char *cbuf = av_malloc(len - 1); | ||||
if (cbuf) { | if (cbuf) { | ||||
int i; | int i; | ||||
@@ -387,7 +387,7 @@ static void vp6_parse_coeff_huffman(VP56Context *s) | |||||
if (coeff_idx) | if (coeff_idx) | ||||
break; | break; | ||||
} else { | } else { | ||||
if (get_bits_count(&s->gb) >= s->gb.size_in_bits) | |||||
if (get_bits_left(&s->gb) <= 0) | |||||
return; | return; | ||||
coeff = get_vlc2(&s->gb, vlc_coeff->table, 9, 3); | coeff = get_vlc2(&s->gb, vlc_coeff->table, 9, 3); | ||||
if (coeff == 0) { | if (coeff == 0) { | ||||