| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -307,6 +307,15 @@ int ff_h264_decode_seq_parameter_set(H264Context *h, int ignore_truncation) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i, log2_max_frame_num_minus4; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    SPS *sps; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sps = av_mallocz(sizeof(SPS)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!sps) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR(ENOMEM); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sps->data_size = h->gb.buffer_end - h->gb.buffer; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (sps->data_size > sizeof(sps->data)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        goto fail; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    memcpy(sps->data, h->gb.buffer, sps->data_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    profile_idc           = get_bits(&h->gb, 8); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    constraint_set_flags |= get_bits1(&h->gb) << 0;   // constraint_set0_flag | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    constraint_set_flags |= get_bits1(&h->gb) << 1;   // constraint_set1_flag | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -320,11 +329,8 @@ int ff_h264_decode_seq_parameter_set(H264Context *h, int ignore_truncation) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (sps_id >= MAX_SPS_COUNT) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_log(h->avctx, AV_LOG_ERROR, "sps_id %u out of range\n", sps_id); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        goto fail; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sps = av_mallocz(sizeof(SPS)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!sps) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR(ENOMEM); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sps->sps_id               = sps_id; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sps->time_offset_length   = 24; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -603,6 +609,12 @@ int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pps = av_mallocz(sizeof(PPS)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!pps) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR(ENOMEM); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pps->data_size = h->gb.buffer_end - h->gb.buffer; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (pps->data_size > sizeof(pps->data)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret = AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        goto fail; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    memcpy(pps->data, h->gb.buffer, pps->data_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pps->sps_id = get_ue_golomb_31(&h->gb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if ((unsigned)pps->sps_id >= MAX_SPS_COUNT || | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        !h->sps_buffers[pps->sps_id]) { | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |