avcodec/h264_sei: Try to make code more robust by jumping to the specified SEI ends
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 21 Jul 2013 17:34:28 +0000 (19:34 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 22 Jul 2013 00:48:13 +0000 (02:48 +0200)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/h264_sei.c

index 9c97c18..999fce7 100644 (file)
@@ -245,7 +245,7 @@ static int decode_frame_packing(H264Context *h, int size){
 int ff_h264_decode_sei(H264Context *h){
     while (get_bits_left(&h->gb) > 16) {
         int type;
-        unsigned size;
+        unsigned size, next;
 
         type=0;
         do{
@@ -268,6 +268,7 @@ int ff_h264_decode_sei(H264Context *h){
             av_log(h->avctx, AV_LOG_ERROR, "SEI truncated\n");
             return AVERROR_INVALIDDATA;
         }
+        next = get_bits_count(&h->gb) + 8*size;
 
         switch(type){
         case SEI_TYPE_PIC_TIMING: // Picture timing SEI
@@ -293,9 +294,8 @@ int ff_h264_decode_sei(H264Context *h){
         case SEI_TYPE_FRAME_PACKING:
             if(decode_frame_packing(h, size) < 0)
                 return -1;
-        default:
-            skip_bits_long(&h->gb, 8*size);
         }
+        skip_bits_long(&h->gb, next - get_bits_count(&h->gb));
 
         //FIXME check bits here
         align_get_bits(&h->gb);