Encoder: grow buffer size in opj_tcd_code_block_enc_allocate_data() to avoid write...
authorEven Rouault <even.rouault@spatialys.com>
Mon, 14 Aug 2017 15:20:37 +0000 (17:20 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Mon, 14 Aug 2017 15:20:37 +0000 (17:20 +0200)
src/lib/openjp2/tcd.c
tests/nonregression/test_suite.ctest.in

index 301c7213e92792bda0457a738d35bf4cf0cd8fc4..53cdcf64d7f87ef2ba2ca14137be9875b81fe8dc 100644 (file)
@@ -1187,8 +1187,11 @@ static OPJ_BOOL opj_tcd_code_block_enc_allocate_data(opj_tcd_cblk_enc_t *
 {
     OPJ_UINT32 l_data_size;
 
-    /* The +1 is needed for https://github.com/uclouvain/openjpeg/issues/835 */
-    l_data_size = 1 + (OPJ_UINT32)((p_code_block->x1 - p_code_block->x0) *
+    /* +1 is needed for https://github.com/uclouvain/openjpeg/issues/835 */
+    /* and actually +2 required for https://github.com/uclouvain/openjpeg/issues/982 */
+    /* TODO: is there a theoretical upper-bound for the compressed code */
+    /* block size ? */
+    l_data_size = 2 + (OPJ_UINT32)((p_code_block->x1 - p_code_block->x0) *
                                    (p_code_block->y1 - p_code_block->y0) * (OPJ_INT32)sizeof(OPJ_UINT32));
 
     if (l_data_size > p_code_block->data_size) {
index aaf40d7d0696f088702b3e1ad95e8d8787306390..ffd964c2abd1859ac2db58f88f5c00d86241a38f 100644 (file)
@@ -169,6 +169,8 @@ opj_compress -i @INPUT_NR_PATH@/Bretagne2.ppm -o @TEMP_PATH@/Bretagne2_empty_ban
 # Same rate as Bretagne2_4.j2k
 opj_compress -i @INPUT_NR_PATH@/Bretagne2.ppm -o @TEMP_PATH@/Bretagne2_empty_band_r800.j2k -t 2591,1943 -n 2 -r 800
 
+opj_compress -i @INPUT_NR_PATH@/issue982.bmp -o @TEMP_PATH@/issue982.j2k -n 1
+
 # DECODER TEST SUITE
 opj_decompress -i  @INPUT_NR_PATH@/Bretagne2.j2k -o @TEMP_PATH@/Bretagne2.j2k.pgx
 opj_decompress -i  @INPUT_NR_PATH@/_00042.j2k -o @TEMP_PATH@/_00042.j2k.pgx