mpeg12: do not decode extradata more than once.
Fixes CVE-2012-2803.
CC: libav-stable@libav.org
(cherry picked from commit 5823686261)
Conflicts:
	libavcodec/mpeg12.c
			
			
This commit is contained in:
		
				
					committed by
					
						
						Reinhard Tartler
					
				
			
			
				
	
			
			
			
						parent
						
							c55ca98769
						
					
				
				
					commit
					56c1e18a52
				
			@@ -2223,8 +2223,9 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
 | 
			
		||||
 | 
			
		||||
    s->slice_count = 0;
 | 
			
		||||
 | 
			
		||||
    if (avctx->extradata && !avctx->frame_number) {
 | 
			
		||||
    if (avctx->extradata && !s->extradata_decoded) {
 | 
			
		||||
        int ret = decode_chunks(avctx, picture, data_size, avctx->extradata, avctx->extradata_size);
 | 
			
		||||
        s->extradata_decoded = 1;
 | 
			
		||||
        if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
 | 
			
		||||
            return ret;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@ typedef struct Mpeg1Context {
 | 
			
		||||
    AVRational frame_rate_ext;       ///< MPEG-2 specific framerate modificator
 | 
			
		||||
    int sync;                        ///< Did we reach a sync point like a GOP/SEQ/KEYFrame?
 | 
			
		||||
    int closed_gop;                  ///< GOP is closed
 | 
			
		||||
    int extradata_decoded;
 | 
			
		||||
} Mpeg1Context;
 | 
			
		||||
 | 
			
		||||
extern uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user