avcodec/exr: fix crash caused by merge

Various header informations need to be reset when decoding next frame.
Regression since: 95582b5c

Fixes ticket #4597.
Signed-off-by: Paul B Mahol <onemda@gmail.com>
(cherry picked from commit a03b69478b)
This commit is contained in:
Paul B Mahol 2015-06-06 15:56:06 +00:00 committed by Carl Eugen Hoyos
parent ff02eeafd8
commit 1a4cb3b29c

View File

@ -1011,6 +1011,22 @@ static int decode_header(EXRContext *s)
int current_channel_offset = 0; int current_channel_offset = 0;
int magic_number, version, flags, i; int magic_number, version, flags, i;
s->xmin = ~0;
s->xmax = ~0;
s->ymin = ~0;
s->ymax = ~0;
s->xdelta = ~0;
s->ydelta = ~0;
s->channel_offsets[0] = -1;
s->channel_offsets[1] = -1;
s->channel_offsets[2] = -1;
s->channel_offsets[3] = -1;
s->pixel_type = EXR_UNKNOWN;
s->compression = EXR_UNKN;
s->nb_channels = 0;
s->w = 0;
s->h = 0;
if (bytestream2_get_bytes_left(&s->gb) < 10) { if (bytestream2_get_bytes_left(&s->gb) < 10) {
av_log(s->avctx, AV_LOG_ERROR, "Header too short to parse.\n"); av_log(s->avctx, AV_LOG_ERROR, "Header too short to parse.\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@ -1351,21 +1367,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
float one_gamma = 1.0f / s->gamma; float one_gamma = 1.0f / s->gamma;
s->avctx = avctx; s->avctx = avctx;
s->xmin = ~0;
s->xmax = ~0;
s->ymin = ~0;
s->ymax = ~0;
s->xdelta = ~0;
s->ydelta = ~0;
s->channel_offsets[0] = -1;
s->channel_offsets[1] = -1;
s->channel_offsets[2] = -1;
s->channel_offsets[3] = -1;
s->pixel_type = EXR_UNKNOWN;
s->compression = EXR_UNKN;
s->nb_channels = 0;
s->w = 0;
s->h = 0;
if ( one_gamma > 0.9999f && one_gamma < 1.0001f ) { if ( one_gamma > 0.9999f && one_gamma < 1.0001f ) {
for ( i = 0; i < 65536; ++i ) { for ( i = 0; i < 65536; ++i ) {