summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Malaterre <mathieu.malaterre@gmail.com>2012-07-11 14:55:39 +0000
committerMathieu Malaterre <mathieu.malaterre@gmail.com>2012-07-11 14:55:39 +0000
commit5ba8d36687e5ee61801e623bb93ff86b901e7bb7 (patch)
treecc1f7aa31a7e4c20125b89234331d1936ef51a19
parent178236cc5f790bfc1b62d90d1341665b2cc770d9 (diff)
[trunk] This fixes issues seen on PDF files
Fixes issue 156
-rw-r--r--libopenjpeg/j2k.c17
-rw-r--r--libopenjpeg/tcd.c6
2 files changed, 17 insertions, 6 deletions
diff --git a/libopenjpeg/j2k.c b/libopenjpeg/j2k.c
index d2e5c927..caa5a781 100644
--- a/libopenjpeg/j2k.c
+++ b/libopenjpeg/j2k.c
@@ -6326,7 +6326,7 @@ opj_bool j2k_update_rates( opj_j2k_v2_t *p_j2k,
static void j2k_read_eoc(opj_j2k_t *j2k) {
int i, tileno;
- opj_bool success;
+ opj_bool success = false;
/* if packets should be decoded */
if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
@@ -6334,11 +6334,16 @@ static void j2k_read_eoc(opj_j2k_t *j2k) {
tcd_malloc_decode(tcd, j2k->image, j2k->cp);
for (i = 0; i < j2k->cp->tileno_size; i++) {
tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
- tileno = j2k->cp->tileno[i];
- success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
- opj_free(j2k->tile_data[tileno]);
- j2k->tile_data[tileno] = NULL;
- tcd_free_decode_tile(tcd, i);
+ if (j2k->cp->tileno[i] != -1)
+ {
+ tileno = j2k->cp->tileno[i];
+ success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
+ opj_free(j2k->tile_data[tileno]);
+ j2k->tile_data[tileno] = NULL;
+ tcd_free_decode_tile(tcd, i);
+ }
+ else
+ success = false;
if (success == OPJ_FALSE) {
j2k->state |= J2K_STATE_ERR;
break;
diff --git a/libopenjpeg/tcd.c b/libopenjpeg/tcd.c
index 1fc97a80..1476bef4 100644
--- a/libopenjpeg/tcd.c
+++ b/libopenjpeg/tcd.c
@@ -796,6 +796,12 @@ void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
opj_tccp_t *tccp = &tcp->tccps[compno];
opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+ if (tccp->numresolutions <= 0)
+ {
+ cp->tileno[tileno] = -1;
+ return;
+ }
+
/* border of each tile component (global) */
tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);