]> granicus.if.org Git - openjpeg/commitdiff
[trunk] Rework r2458, instead we should reject 451.pdf.SIGSEGV.ce9.3723 since tile...
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Fri, 28 Feb 2014 15:24:33 +0000 (15:24 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Fri, 28 Feb 2014 15:24:33 +0000 (15:24 +0000)
Update issue 225

src/lib/openjp2/j2k.c

index bd39f759324f4983d5571156509f304330601f88..9637b55243ffe37a34c2c9416ab2685f04ca205a 100644 (file)
@@ -4010,12 +4010,20 @@ OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k,
                 if (l_num_parts != 0) { /* Number of tile-part header is provided by this tile-part header */
                         /* Useful to manage the case of textGBR.jp2 file because two values of TNSot are allowed: the correct numbers of
                          * tile-parts for that tile and zero (A.4.2 of 15444-1 : 2002). */
-                        if (l_num_parts < l_tcp->m_nb_tile_parts) {
-                                l_num_parts = l_tcp->m_nb_tile_parts;
+                        if (l_tcp->m_nb_tile_parts) {
+                                if (l_current_part >= l_tcp->m_nb_tile_parts){
+                                        opj_event_msg(p_manager, EVT_ERROR, "In SOT marker, TPSot (%d) is not valid regards to the current "
+                                                        "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_current_part >= l_num_parts) {
-                                /* testcase 451.pdf.SIGSEGV.ce9.3723 */
-                                l_num_parts = l_current_part + 1;
+                        if( l_current_part >= l_num_parts ) {
+                          /* testcase 451.pdf.SIGSEGV.ce9.3723 */
+                          opj_event_msg(p_manager, EVT_ERROR, "In SOT marker, TPSot (%d) is not valid regards to the current "
+                            "number of tile-part (header) (%d), giving up\n", l_current_part, l_num_parts );
+                          p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
+                          return OPJ_FALSE;
                         }
                         l_tcp->m_nb_tile_parts = l_num_parts;
                 }