aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-08-01 11:00:03 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-08-01 11:00:03 +0000
commitffba1dc02b3c808dcf023351a0ed5dcca3fc1513 (patch)
tree24354fc10db44d8c98de0949c6b3ea817e13dfe9 /libavcodec/h263.c
parente7d0374f2763a95965750c442bfb690387150321 (diff)
downloadffmpeg-ffba1dc02b3c808dcf023351a0ed5dcca3fc1513.tar.gz
make the h263 decoder more error tolerant
Originally committed as revision 2099 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index 9d1f5992a1..3f48418131 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -2500,6 +2500,8 @@ static int h263_decode_gob_header(MpegEncContext *s)
return -1;
s->mb_x= 0;
s->mb_y= s->gob_index* s->gob_number;
+ if(s->mb_y >= s->mb_height)
+ return -1;
#ifdef DEBUG
fprintf(stderr, "\nGN: %u GFID: %u Quant: %u\n", s->gob_number, gfid, s->qscale);
#endif
@@ -4069,7 +4071,7 @@ int h263_decode_picture_header(MpegEncContext *s)
startcode= get_bits(&s->gb, 22-8);
- for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>0; i--) {
+ for(i= s->gb.size_in_bits - get_bits_count(&s->gb); i>24; i-=8) {
startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
if(startcode == 0x20)
@@ -4116,8 +4118,6 @@ int h263_decode_picture_header(MpegEncContext *s)
if (!width)
return -1;
- s->width = width;
- s->height = height;
s->pict_type = I_TYPE + get_bits1(&s->gb);
s->unrestricted_mv = get_bits1(&s->gb);
@@ -4137,6 +4137,9 @@ int h263_decode_picture_header(MpegEncContext *s)
}
s->qscale = get_bits(&s->gb, 5);
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
+
+ s->width = width;
+ s->height = height;
} else {
int ufep;