opj_j2k_read_sot(): check current TPSot number regarding previous (non-zero) TNsot...
authorEven Rouault <even.rouault@spatialys.com>
Fri, 4 Aug 2017 16:01:29 +0000 (18:01 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Fri, 4 Aug 2017 16:02:10 +0000 (18:02 +0200)
src/lib/openjp2/j2k.c

index 21befaa80c158fce8f8da4d572a103ed47009630..76efb018cab3fd71a224ad0a819c60afa2f279f2 100644 (file)
@@ -4378,6 +4378,16 @@ static OPJ_BOOL opj_j2k_read_sot(opj_j2k_t *p_j2k,
         p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
     }
 
+    if (l_tcp->m_nb_tile_parts != 0 && l_current_part >= l_tcp->m_nb_tile_parts) {
+        /* Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=2851 */
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "In SOT marker, TPSot (%d) is not valid regards to the previous "
+                      "number of tile-part (%d), giving up\n", l_current_part,
+                      l_tcp->m_nb_tile_parts);
+        p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
+        return OPJ_FALSE;
+    }
+
     if (l_num_parts !=
             0) { /* Number of tile-part header is provided by this tile-part header */
         l_num_parts += p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction;