diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2018-06-24 16:00:30 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2018-07-19 18:38:12 +0800 |
commit | fb8347da8e388793a4add8442931dbd5033fce41 (patch) | |
tree | e26d186024e2c6eed65b82f8347f7aa6a726ffe0 /jbig2dec/jbig2_generic.c | |
parent | 29371c6872f9b72e3810d76bd920f41619924fa7 (diff) | |
download | ghostpdl-fb8347da8e388793a4add8442931dbd5033fce41.tar.gz |
jbig2dec: Handle immediate generic regions with unknown height.
Diffstat (limited to 'jbig2dec/jbig2_generic.c')
-rw-r--r-- | jbig2dec/jbig2_generic.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/jbig2dec/jbig2_generic.c b/jbig2dec/jbig2_generic.c index 89351ece6..a3a89415c 100644 --- a/jbig2dec/jbig2_generic.c +++ b/jbig2dec/jbig2_generic.c @@ -795,6 +795,7 @@ jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte Jbig2WordStream *ws = NULL; Jbig2ArithState *as = NULL; Jbig2ArithCx *GB_stats = NULL; + uint32_t height; /* 7.4.6 */ if (segment->data_length < 18) @@ -803,6 +804,14 @@ jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte jbig2_get_region_segment_info(&rsi, segment_data); jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "generic region: %d x %d @ (%d, %d), flags = %02x", rsi.width, rsi.height, rsi.x, rsi.y, rsi.flags); + /* 7.4.6.4 */ + height = rsi.height; + if (segment->rows != UINT32_MAX) { + if (segment->rows > rsi.height) + return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment contains more rows than stated in header"); + height = segment->rows; + } + /* 7.4.6.2 */ seg_flags = segment_data[17]; jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "segment flags = %02x", seg_flags); @@ -831,10 +840,10 @@ jbig2_immediate_generic_region(Jbig2Ctx *ctx, Jbig2Segment *segment, const byte params.USESKIP = 0; memcpy(params.gbat, gbat, gbat_bytes); - image = jbig2_image_new(ctx, rsi.width, rsi.height); + image = jbig2_image_new(ctx, rsi.width, height); if (image == NULL) return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unable to allocate generic image"); - jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "allocated %d x %d image buffer for region decode results", rsi.width, rsi.height); + jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, segment->number, "allocated %d x %d image buffer for region decode results", rsi.width, height); if (params.MMR) { code = jbig2_decode_generic_mmr(ctx, segment, ¶ms, segment_data + offset, segment->data_length - offset, image); |