g2meet: reset dimensions on header parsing errors

This commit is contained in:
Kostya Shishkov 2013-06-11 18:34:26 +02:00
parent 84d3ff50cd
commit 767ae86cee
1 changed files with 12 additions and 5 deletions

View File

@ -646,8 +646,8 @@ static int g2m_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"Invalid frame dimensions %dx%d\n", "Invalid frame dimensions %dx%d\n",
c->width, c->height); c->width, c->height);
c->width = c->height = 0; ret = AVERROR_INVALIDDATA;
bytestream2_skip(&bc, bytestream2_get_bytes_left(&bc)); goto header_fail;
} }
if (c->width != avctx->width || c->height != avctx->height) if (c->width != avctx->width || c->height != avctx->height)
avcodec_set_dimensions(avctx, c->width, c->height); avcodec_set_dimensions(avctx, c->width, c->height);
@ -664,15 +664,18 @@ static int g2m_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"Invalid tile dimensions %dx%d\n", "Invalid tile dimensions %dx%d\n",
c->tile_width, c->tile_height); c->tile_width, c->tile_height);
return AVERROR_INVALIDDATA; ret = AVERROR_INVALIDDATA;
goto header_fail;
} }
c->tiles_x = (c->width + c->tile_width - 1) / c->tile_width; c->tiles_x = (c->width + c->tile_width - 1) / c->tile_width;
c->tiles_y = (c->height + c->tile_height - 1) / c->tile_height; c->tiles_y = (c->height + c->tile_height - 1) / c->tile_height;
c->bpp = bytestream2_get_byte(&bc); c->bpp = bytestream2_get_byte(&bc);
chunk_size -= 21; chunk_size -= 21;
bytestream2_skip(&bc, chunk_size); bytestream2_skip(&bc, chunk_size);
if (g2m_init_buffers(c)) if (g2m_init_buffers(c)) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto header_fail;
}
got_header = 1; got_header = 1;
break; break;
case TILE_DATA: case TILE_DATA:
@ -778,6 +781,10 @@ static int g2m_decode_frame(AVCodecContext *avctx, void *data,
} }
return buf_size; return buf_size;
header_fail:
c->width = c->height = 0;
c->tiles_x = c->tiles_y = 0;
return ret;
} }
static av_cold int g2m_decode_init(AVCodecContext *avctx) static av_cold int g2m_decode_init(AVCodecContext *avctx)