avcodec/tiff: Disallow striped and tiled tiffs except for DNG
strips + tiles is not allowed in TIFF
DNG uses a separate codepath
Regression since da5b3d0028
.
Fixes: NULL pointer dereference
Fixes: poc1
Fixes: Ticket8960
Found-by: 1vanChen of NSFOCUS Security Team
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -1923,14 +1923,17 @@ again:
|
|||||||
has_strip_bits = s->strippos || s->strips || s->stripoff || s->rps || s->sot || s->sstype || s->stripsize || s->stripsizesoff;
|
has_strip_bits = s->strippos || s->strips || s->stripoff || s->rps || s->sot || s->sstype || s->stripsize || s->stripsizesoff;
|
||||||
|
|
||||||
if (has_tile_bits && has_strip_bits) {
|
if (has_tile_bits && has_strip_bits) {
|
||||||
av_log(avctx, AV_LOG_WARNING, "Tiled TIFF is not allowed to strip\n");
|
int tiled_dng = s->is_tiled && is_dng;
|
||||||
|
av_log(avctx, tiled_dng ? AV_LOG_WARNING : AV_LOG_ERROR, "Tiled TIFF is not allowed to strip\n");
|
||||||
|
if (!tiled_dng)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now we have the data and may start decoding */
|
/* now we have the data and may start decoding */
|
||||||
if ((ret = init_image(s, &frame)) < 0)
|
if ((ret = init_image(s, &frame)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!s->is_tiled) {
|
if (!s->is_tiled || has_strip_bits) {
|
||||||
if (s->strips == 1 && !s->stripsize) {
|
if (s->strips == 1 && !s->stripsize) {
|
||||||
av_log(avctx, AV_LOG_WARNING, "Image data size missing\n");
|
av_log(avctx, AV_LOG_WARNING, "Image data size missing\n");
|
||||||
s->stripsize = avpkt->size - s->stripoff;
|
s->stripsize = avpkt->size - s->stripoff;
|
||||||
|
Reference in New Issue
Block a user