[trunk] Rework r2458, instead we should reject 451.pdf.SIGSEGV.ce9.3723 since tile-parts are out of order (as per kakadu behavior).

Update issue 225
This commit is contained in:
Mathieu Malaterre 2014-02-28 15:24:33 +00:00
parent 1b93cb8c0a
commit fd5f21af00
1 changed files with 13 additions and 5 deletions

View 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 */ 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 /* 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). */ * tile-parts for that tile and zero (A.4.2 of 15444-1 : 2002). */
if (l_num_parts < l_tcp->m_nb_tile_parts) { if (l_tcp->m_nb_tile_parts) {
l_num_parts = 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 ) { if( l_current_part >= l_num_parts ) {
/* testcase 451.pdf.SIGSEGV.ce9.3723 */ /* testcase 451.pdf.SIGSEGV.ce9.3723 */
l_num_parts = l_current_part + 1; 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; l_tcp->m_nb_tile_parts = l_num_parts;
} }