diff options
author | Martin Vignali <martin.vignali@gmail.com> | 2016-11-16 23:15:27 +0100 |
---|---|---|
committer | Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> | 2016-11-16 23:45:44 +0100 |
commit | 52da3f6f70b1e95589a152aaf224811756fb9665 (patch) | |
tree | ccbdf14f2269d6cca587b312e73430870981ce87 /libavcodec | |
parent | ce3147eb198770b558acf6c05f33cb807a413707 (diff) | |
download | ffmpeg-52da3f6f70b1e95589a152aaf224811756fb9665.tar.gz |
libavcodec/exr : fix channel size calculation for uint32 channel
uint32 need 4 bytes not 1.
Fix decoding when there is half/float and uint32 channel.
This fixes crashes due to pointer corruption caused by invalid writes.
The problem was introduced in commit
03152e74dfdc7f438cb4a10402c4de744e807e22.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/exr.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libavcodec/exr.c b/libavcodec/exr.c index 51c17d6ebd..f02337e3ef 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -1448,7 +1448,11 @@ static int decode_header(EXRContext *s) channel->xsub = xsub; channel->ysub = ysub; - s->current_channel_offset += 1 << current_pixel_type; + if (current_pixel_type == EXR_HALF) { + s->current_channel_offset += 2; + } else {/* Float or UINT32 */ + s->current_channel_offset += 4; + } } /* Check if all channels are set with an offset or if the channels |