Commit 21d70372 authored by Dustin Brody's avatar Dustin Brody Committed by Ronald S. Bultje

mjpeg: propagate decode errors from ff_mjpeg_decode_sos and ff_mjpeg_decode_dqt

Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent bac3ab13
...@@ -81,7 +81,9 @@ read_header: ...@@ -81,7 +81,9 @@ read_header:
{ {
init_get_bits(&s->gb, buf_ptr+dqt_offs, (buf_end - (buf_ptr+dqt_offs))*8); init_get_bits(&s->gb, buf_ptr+dqt_offs, (buf_end - (buf_ptr+dqt_offs))*8);
s->start_code = DQT; s->start_code = DQT;
ff_mjpeg_decode_dqt(s); if (ff_mjpeg_decode_dqt(s) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
} }
dht_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dht is %d and size is %d\n"); dht_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dht is %d and size is %d\n");
...@@ -113,7 +115,9 @@ read_header: ...@@ -113,7 +115,9 @@ read_header:
init_get_bits(&s->gb, buf_ptr+sos_offs, field_size*8); init_get_bits(&s->gb, buf_ptr+sos_offs, field_size*8);
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16)); s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
s->start_code = SOS; s->start_code = SOS;
ff_mjpeg_decode_sos(s, NULL, NULL); if (ff_mjpeg_decode_sos(s, NULL, NULL) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
} }
if (s->interlaced) { if (s->interlaced) {
......
...@@ -1525,7 +1525,9 @@ eoi_parser: ...@@ -1525,7 +1525,9 @@ eoi_parser:
av_log(avctx, AV_LOG_WARNING, "Can not process SOS before SOF, skipping\n"); av_log(avctx, AV_LOG_WARNING, "Can not process SOS before SOF, skipping\n");
break; break;
} }
ff_mjpeg_decode_sos(s, NULL, NULL); if (ff_mjpeg_decode_sos(s, NULL, NULL) < 0 &&
avctx->error_recognition >= FF_ER_EXPLODE)
return AVERROR_INVALIDDATA;
/* buggy avid puts EOI every 10-20th frame */ /* buggy avid puts EOI every 10-20th frame */
/* if restart period is over process EOI */ /* if restart period is over process EOI */
if ((s->buggy_avid && !s->interlaced) || s->restart_interval) if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
......
...@@ -275,9 +275,13 @@ static int mxpeg_decode_frame(AVCodecContext *avctx, ...@@ -275,9 +275,13 @@ static int mxpeg_decode_frame(AVCodecContext *avctx,
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
ff_mjpeg_decode_sos(jpg, s->mxm_bitmask, reference_ptr); ret = ff_mjpeg_decode_sos(jpg, s->mxm_bitmask, reference_ptr);
if (ret < 0 && avctx->error_recognition >= FF_ER_EXPLODE)
return ret;
} else { } else {
ff_mjpeg_decode_sos(jpg, NULL, NULL); ret = ff_mjpeg_decode_sos(jpg, NULL, NULL);
if (ret < 0 && avctx->error_recognition >= FF_ER_EXPLODE)
return ret;
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment