From 0605f5c86bb54f51d9f0cfd728a92bc2f6982449 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sun, 14 Sep 2008 15:50:59 +0000 Subject: Return error when trying to decode non-grayscale 16-bit PNM images. Fixes issue 566. Originally committed as revision 15321 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/pnm.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'libavcodec/pnm.c') diff --git a/libavcodec/pnm.c b/libavcodec/pnm.c index 587b703bed..be831ddbc0 100644 --- a/libavcodec/pnm.c +++ b/libavcodec/pnm.c @@ -106,7 +106,13 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){ else avctx->pix_fmt = PIX_FMT_GRAY8; } else if (depth == 3) { + if (maxval < 256) { avctx->pix_fmt = PIX_FMT_RGB24; + } else { + av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n"); + avctx->pix_fmt = PIX_FMT_NONE; + return -1; + } } else if (depth == 4) { avctx->pix_fmt = PIX_FMT_RGB32; } else { @@ -127,10 +133,16 @@ int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s){ if (avctx->pix_fmt != PIX_FMT_MONOWHITE) { pnm_get(s, buf1, sizeof(buf1)); s->maxval = atoi(buf1); - if(s->maxval >= 256 && avctx->pix_fmt == PIX_FMT_GRAY8) { + if (s->maxval >= 256) { + if (avctx->pix_fmt == PIX_FMT_GRAY8) { avctx->pix_fmt = PIX_FMT_GRAY16BE; if (s->maxval != 65535) avctx->pix_fmt = PIX_FMT_GRAY16; + } else { + av_log(avctx, AV_LOG_ERROR, "16-bit components are only supported for grayscale\n"); + avctx->pix_fmt = PIX_FMT_NONE; + return -1; + } } } /* more check if YUV420 */ -- cgit v1.2.3