You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avcodec/fitsdec: Prevent division by 0 with huge data_max
Fixes: division by 0 Fixes: 15657/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_FITS_fuzzer-5738154838982656 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		| @@ -195,6 +195,7 @@ static int fits_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||||
|     uint8_t *dst8; |     uint8_t *dst8; | ||||||
|     uint16_t *dst16; |     uint16_t *dst16; | ||||||
|     uint64_t t; |     uint64_t t; | ||||||
|  |     double scale; | ||||||
|     FITSHeader header; |     FITSHeader header; | ||||||
|     FITSContext * fitsctx = avctx->priv_data; |     FITSContext * fitsctx = avctx->priv_data; | ||||||
|  |  | ||||||
| @@ -204,6 +205,12 @@ static int fits_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||||
|     if (ret < 0) |     if (ret < 0) | ||||||
|         return ret; |         return ret; | ||||||
|  |  | ||||||
|  |     scale = header.data_max - header.data_min; | ||||||
|  |     if (scale <= 0 || !isfinite(scale)) { | ||||||
|  |         scale = 1; | ||||||
|  |     } | ||||||
|  |     scale = 1/scale; | ||||||
|  |  | ||||||
|     if (header.rgb) { |     if (header.rgb) { | ||||||
|         if (header.bitpix == 8) { |         if (header.bitpix == 8) { | ||||||
|             if (header.naxisn[2] == 3) { |             if (header.naxisn[2] == 3) { | ||||||
| @@ -272,7 +279,7 @@ static int fits_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||||
|             for (j = 0; j < avctx->width; j++) { \ |             for (j = 0; j < avctx->width; j++) { \ | ||||||
|                 t = rd; \ |                 t = rd; \ | ||||||
|                 if (!header.blank_found || t != header.blank) { \ |                 if (!header.blank_found || t != header.blank) { \ | ||||||
|                     *dst++ = ((t - header.data_min) * ((1 << (sizeof(type) * 8)) - 1)) / (header.data_max - header.data_min); \ |                     *dst++ = ((t - header.data_min) * ((1 << (sizeof(type) * 8)) - 1)) * scale; \ | ||||||
|                 } else { \ |                 } else { \ | ||||||
|                     *dst++ = fitsctx->blank_val; \ |                     *dst++ = fitsctx->blank_val; \ | ||||||
|                 } \ |                 } \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user