Merge commit '0af5a774ebc96ae9018926dc8b276c7f39767e3e' into release/1.1
* commit '0af5a774ebc96ae9018926dc8b276c7f39767e3e': jpegls: check the scan offset jpegls: factorize return paths jpegls: return meaningful errors mpegvideo: allocate sufficiently large scratch buffer for interlaced vid Conflicts: libavcodec/jpeglsdec.c libavcodec/mpegvideo.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -70,13 +70,13 @@ int ff_jpegls_decode_lse(MJpegDecodeContext *s)
|
|||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "palette not supported\n");
|
av_log(s->avctx, AV_LOG_ERROR, "palette not supported\n");
|
||||||
return -1;
|
return AVERROR(ENOSYS);
|
||||||
case 4:
|
case 4:
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "oversize image not supported\n");
|
av_log(s->avctx, AV_LOG_ERROR, "oversize image not supported\n");
|
||||||
return -1;
|
return AVERROR(ENOSYS);
|
||||||
default:
|
default:
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "invalid id %d\n", id);
|
av_log(s->avctx, AV_LOG_ERROR, "invalid id %d\n", id);
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
av_dlog(s->avctx, "ID=%i, T=%i,%i,%i\n", id, s->t1, s->t2, s->t3);
|
av_dlog(s->avctx, "ID=%i, T=%i,%i,%i\n", id, s->t1, s->t2, s->t3);
|
||||||
|
|
||||||
@@ -262,7 +262,7 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, int point_transfor
|
|||||||
int i, t = 0;
|
int i, t = 0;
|
||||||
uint8_t *zero, *last, *cur;
|
uint8_t *zero, *last, *cur;
|
||||||
JLSState *state;
|
JLSState *state;
|
||||||
int off = 0, stride = 1, width, shift;
|
int off = 0, stride = 1, width, shift, ret = 0;
|
||||||
|
|
||||||
zero = av_mallocz(s->picture.linesize[0]);
|
zero = av_mallocz(s->picture.linesize[0]);
|
||||||
last = zero;
|
last = zero;
|
||||||
@@ -294,6 +294,10 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, int point_transfor
|
|||||||
ilv, point_transform, s->bits, s->cur_scan);
|
ilv, point_transform, s->bits, s->cur_scan);
|
||||||
}
|
}
|
||||||
if(ilv == 0) { /* separate planes */
|
if(ilv == 0) { /* separate planes */
|
||||||
|
if (s->cur_scan > s->nb_components) {
|
||||||
|
ret = AVERROR_INVALIDDATA;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
stride = (s->nb_components > 1) ? 3 : 1;
|
stride = (s->nb_components > 1) ? 3 : 1;
|
||||||
off = av_clip(s->cur_scan - 1, 0, stride - 1);
|
off = av_clip(s->cur_scan - 1, 0, stride - 1);
|
||||||
width = s->width * stride;
|
width = s->width * stride;
|
||||||
@@ -335,9 +339,8 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, int point_transfor
|
|||||||
}
|
}
|
||||||
} else if (ilv == 2) { /* sample interleaving */
|
} else if (ilv == 2) { /* sample interleaving */
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "Sample interleaved images are not supported.\n");
|
av_log(s->avctx, AV_LOG_ERROR, "Sample interleaved images are not supported.\n");
|
||||||
av_free(state);
|
ret = AVERROR_PATCHWELCOME;
|
||||||
av_free(zero);
|
goto end;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(shift){ /* we need to do point transform or normalize samples */
|
if(shift){ /* we need to do point transform or normalize samples */
|
||||||
@@ -365,10 +368,12 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, int point_transfor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
av_free(state);
|
av_free(state);
|
||||||
av_free(zero);
|
av_free(zero);
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user