lavf: do basic sanity checking on muxed packets
Reject packets for non-existing or attachment streams.
This commit is contained in:
		
							parent
							
								
									5de64bb34d
								
							
						
					
					
						commit
						7b03b65bf0
					
				| @ -429,10 +429,33 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static int check_packet(AVFormatContext *s, AVPacket *pkt) | ||||
| { | ||||
|     if (!pkt) | ||||
|         return 0; | ||||
| 
 | ||||
|     if (pkt->stream_index < 0 || pkt->stream_index >= s->nb_streams) { | ||||
|         av_log(s, AV_LOG_ERROR, "Invalid packet stream index: %d\n", | ||||
|                pkt->stream_index); | ||||
|         return AVERROR(EINVAL); | ||||
|     } | ||||
| 
 | ||||
|     if (s->streams[pkt->stream_index]->codec->codec_type == AVMEDIA_TYPE_ATTACHMENT) { | ||||
|         av_log(s, AV_LOG_ERROR, "Received a packet for an attachment stream.\n"); | ||||
|         return AVERROR(EINVAL); | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int av_write_frame(AVFormatContext *s, AVPacket *pkt) | ||||
| { | ||||
|     int ret; | ||||
| 
 | ||||
|     ret = check_packet(s, pkt); | ||||
|     if (ret < 0) | ||||
|         return ret; | ||||
| 
 | ||||
|     if (!pkt) { | ||||
|         if (s->oformat->flags & AVFMT_ALLOW_FLUSH) | ||||
|             return s->oformat->write_packet(s, pkt); | ||||
| @ -560,6 +583,10 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) | ||||
| { | ||||
|     int ret, flush = 0; | ||||
| 
 | ||||
|     ret = check_packet(s, pkt); | ||||
|     if (ret < 0) | ||||
|         return ret; | ||||
| 
 | ||||
|     if (pkt) { | ||||
|         AVStream *st = s->streams[pkt->stream_index]; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user