@param color Collector for profile, cdef and pclr data
@param image
*/
-static void jp2_apply_pclr(opj_image_t *image, opj_jp2_color_t *color);
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image, opj_common_ptr cinfo);
/**
Collect palette data
@param jp2 JP2 handle
if(color->icc_profile_buf) opj_free(color->icc_profile_buf);
}
-
-static void jp2_apply_pclr(opj_image_t *image, opj_jp2_color_t *color)
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image, opj_common_ptr cinfo)
{
opj_image_comp_t *old_comps, *new_comps;
OPJ_BYTE *channel_size, *channel_sign;
for(i = 0; i < nr_channels; ++i) {
pcol = cmap[i].pcol; cmp = cmap[i].cmp;
- new_comps[pcol] = old_comps[cmp];
+ if( pcol < nr_channels )
+ new_comps[pcol] = old_comps[cmp];
+ else
+ {
+ opj_event_msg(cinfo, EVT_ERROR, "Error with pcol value %d (max: %d). skipping\n", pcol, nr_channels);
+ continue;
+ }
/* Direct use */
if(cmap[i].mtyp == 0){
if( !color.jp2_pclr->cmap)
jp2_free_pclr(&color);
else
- jp2_apply_pclr(image, &color);
+ jp2_apply_pclr(&color, image, cinfo);
}
if(color.icc_profile_buf)
{