shithub: jbig2

Download patch

ref: 06ddc496c3ea047ccb440e42adec7580317ff06d
parent: 4845d4cc36f6dc27ccc420eea0942d98157e89d3
author: Sebastian Rasmussen <sebras@gmail.com>
date: Sun Jul 1 13:26:21 EDT 2018

jbig2dec: Read region segment height/width/x/y as unsigned.

The specification in 5.4.4 states that numbers are unsigned unless
otherwise stated. 7.4.1.1 through 7.4.1.4 specifying the region segment
height, width, x and y do not mention that these fields are signed,
hence they ought to read and handled as unsigned.

--- a/jbig2_generic.c
+++ b/jbig2_generic.c
@@ -839,7 +839,7 @@
         return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
 
     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);
+    jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "generic region: %u x %u @ (%u, %u), flags = %02x", rsi.width, rsi.height, rsi.x, rsi.y, rsi.flags);
 
     /* 7.4.6.4 */
     height = rsi.height;
--- a/jbig2_halftone.c
+++ b/jbig2_halftone.c
@@ -575,7 +575,7 @@
     offset += 1;
 
     jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number,
-                "halftone region: %d x %d @ (%x,%d) flags=%02x", region_info.width, region_info.height, region_info.x, region_info.y, params.flags);
+                "halftone region: %u x %u @ (%u, %u), flags = %02x", region_info.width, region_info.height, region_info.x, region_info.y, params.flags);
 
     if (params.HMMR && params.HTEMPLATE) {
         jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "HTEMPLATE is %d when HMMR is %d, contrary to spec", params.HTEMPLATE, params.HMMR);
--- a/jbig2_page.c
+++ b/jbig2_page.c
@@ -258,7 +258,7 @@
  * is an image) to a page image buffer
  **/
 int
-jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, int x, int y, Jbig2ComposeOp op)
+jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *image, uint32_t x, uint32_t y, Jbig2ComposeOp op)
 {
     int code;
 
--- a/jbig2_page.h
+++ b/jbig2_page.h
@@ -48,6 +48,6 @@
 int jbig2_page_info(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
 int jbig2_end_of_stripe(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
 int jbig2_end_of_page(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data);
-int jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *src, int x, int y, Jbig2ComposeOp op);
+int jbig2_page_add_result(Jbig2Ctx *ctx, Jbig2Page *page, Jbig2Image *src, uint32_t x, uint32_t y, Jbig2ComposeOp op);
 
 #endif /* _JBIG2_PAGE_H */
--- a/jbig2_refinement.c
+++ b/jbig2_refinement.c
@@ -432,7 +432,7 @@
         return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "segment too short");
 
     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);
+    jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "generic region: %u x %u @ (%u, %u), flags = %02x", rsi.width, rsi.height, rsi.x, rsi.y, rsi.flags);
 
     /* 7.4.7.2 */
     seg_flags = segment_data[17];
--- a/jbig2_segment.c
+++ b/jbig2_segment.c
@@ -196,10 +196,10 @@
 jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, const uint8_t *segment_data)
 {
     /* 7.4.1 */
-    info->width = jbig2_get_int32(segment_data);
-    info->height = jbig2_get_int32(segment_data + 4);
-    info->x = jbig2_get_int32(segment_data + 8);
-    info->y = jbig2_get_int32(segment_data + 12);
+    info->width = jbig2_get_uint32(segment_data);
+    info->height = jbig2_get_uint32(segment_data + 4);
+    info->x = jbig2_get_uint32(segment_data + 8);
+    info->y = jbig2_get_uint32(segment_data + 12);
     info->flags = segment_data[16];
     info->op = (Jbig2ComposeOp)(info->flags & 0x7);
 }
--- a/jbig2_segment.h
+++ b/jbig2_segment.h
@@ -41,10 +41,10 @@
 /* region segment info */
 
 typedef struct {
-    int32_t width;
-    int32_t height;
-    int32_t x;
-    int32_t y;
+    uint32_t width;
+    uint32_t height;
+    uint32_t x;
+    uint32_t y;
     Jbig2ComposeOp op;
     uint8_t flags;
 } Jbig2RegionSegmentInfo;