avformat/dhav: Check position for overflow
Fixes: signed integer overflow: 9223372036854775807 + 32768 cannot be represented in type 'long' Fixes: 27744/clusterfuzz-testcase-minimized-ffmpeg_dem_DHAV_fuzzer-5179319491756032 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 0a0b92b4b2b1288141059684cea741a79cc1e7f2) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
							parent
							
								
									50ac656fdd
								
							
						
					
					
						commit
						ef2e673f8f
					
				| @ -173,12 +173,12 @@ static int read_chunk(AVFormatContext *s) | ||||
|     if (avio_feof(s->pb)) | ||||
|         return AVERROR_EOF; | ||||
| 
 | ||||
|     if (avio_rl32(s->pb) != MKTAG('D','H','A','V')) { | ||||
|     if (avio_rl32(s->pb) != MKTAG('D','H','A','V') && dhav->last_good_pos < INT64_MAX - 0x8000) { | ||||
|         dhav->last_good_pos += 0x8000; | ||||
|         avio_seek(s->pb, dhav->last_good_pos, SEEK_SET); | ||||
| 
 | ||||
|         while (avio_rl32(s->pb) != MKTAG('D','H','A','V')) { | ||||
|             if (avio_feof(s->pb)) | ||||
|             if (avio_feof(s->pb) || dhav->last_good_pos >= INT64_MAX - 0x8000) | ||||
|                 return AVERROR_EOF; | ||||
|             dhav->last_good_pos += 0x8000; | ||||
|             ret = avio_skip(s->pb, 0x8000 - 4); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user