/* don't forget to release pi */
opj_pi_destroy(l_pi,l_nb_pocs);
- *p_data_read = l_current_data - p_src;
+ assert( (OPJ_INT64)(l_current_data - p_src) < (OPJ_INT64)UINT32_MAX );
+ *p_data_read = (OPJ_UINT32)(l_current_data - p_src);
return OPJ_TRUE;
}
c[1] = 145;
c[2] = 0;
c[3] = 4;
+#if 0
c[4] = (tile->packno % 65536) / 256;
c[5] = (tile->packno % 65536) % 256;
+#else
+ c[4] = (tile->packno >> 8) & 0xff; /* packno is uint32_t */
+ c[5] = tile->packno & 0xff;
+#endif
c += 6;
length -= 6;
}
cblk = &prc->cblks.enc[cblkno];
cblk->numpasses = 0;
- opj_tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
+ opj_tgt_setvalue(prc->imsbtree, cblkno, band->numbps - (OPJ_INT32)cblk->numbps);
}
++band;
}
opj_tcd_layer_t *layer = &cblk->layers[layno];
if (!cblk->numpasses && layer->numpasses) {
- opj_tgt_setvalue(prc->incltree, cblkno, layno);
+ opj_tgt_setvalue(prc->incltree, cblkno, (OPJ_INT32)layno);
}
++cblk;
/* cblk inclusion bits */
if (!cblk->numpasses) {
- opj_tgt_encode(bio, prc->incltree, cblkno, layno + 1);
+ opj_tgt_encode(bio, prc->incltree, cblkno, (OPJ_INT32)(layno + 1));
} else {
opj_bio_write(bio, layer->numpasses != 0, 1);
}
len += pass->len;
if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
- increment = opj_int_max(increment, opj_int_floorlog2(len) + 1 - (cblk->numlenbits + opj_int_floorlog2(nump)));
+ increment = (OPJ_UINT32)opj_int_max((OPJ_INT32)increment, opj_int_floorlog2((OPJ_INT32)len) + 1
+ - ((OPJ_INT32)cblk->numlenbits + opj_int_floorlog2((OPJ_INT32)nump)));
len = 0;
nump = 0;
}
++pass;
}
- opj_t2_putcommacode(bio, increment);
+ opj_t2_putcommacode(bio, (OPJ_INT32)increment);
/* computation of the new Length indicator */
cblk->numlenbits += increment;
len += pass->len;
if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
- opj_bio_write(bio, len, cblk->numlenbits + opj_int_floorlog2(nump));
+ opj_bio_write(bio, (OPJ_UINT32)len, cblk->numlenbits + (OPJ_UINT32)opj_int_floorlog2((OPJ_INT32)nump));
len = 0;
nump = 0;
}
return OPJ_FALSE; /* modified to eliminate longjmp !! */
}
- l_nb_bytes = opj_bio_numbytes(bio);
+ l_nb_bytes = (OPJ_UINT32)opj_bio_numbytes(bio);
c += l_nb_bytes;
length -= l_nb_bytes;
++band;
}
- * p_data_written += (c - dest);
+ assert( c >= dest );
+ * p_data_written += (OPJ_UINT32)(c - dest);
return OPJ_TRUE;
}
else { /* Normal Case */
l_header_data_start = &(l_current_data);
l_header_data = *l_header_data_start;
- l_remaining_length = p_src_data+p_max_length-l_header_data;
+ l_remaining_length = (OPJ_UINT32)(p_src_data+p_max_length-l_header_data);
l_modified_length_ptr = &(l_remaining_length);
}
if (p_max_length < 2) {
fprintf(stderr, "Not enough space for expected EPH marker\n");
} else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
- printf("Error : expected EPH marker\n");
+ fprintf(stderr, "Error : expected EPH marker\n");
} else {
l_header_data += 2;
}
}
- l_header_length = (l_header_data - *l_header_data_start);
+ l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
*l_modified_length_ptr -= l_header_length;
*l_header_data_start += l_header_length;
/* INDEX >> */
* p_is_data_present = OPJ_FALSE;
- *p_data_read = l_current_data - p_src_data;
+ *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
return OPJ_TRUE;
}
/* if cblk not yet included before --> inclusion tagtree */
if (!l_cblk->numsegs) {
- l_included = opj_tgt_decode(l_bio, l_prc->incltree, cblkno, p_pi->layno + 1);
+ l_included = opj_tgt_decode(l_bio, l_prc->incltree, cblkno, (OPJ_INT32)(p_pi->layno + 1));
/* else one bit */
}
else {
if (!l_cblk->numsegs) {
OPJ_UINT32 i = 0;
- while (!opj_tgt_decode(l_bio, l_prc->imsbtree, cblkno, i)) {
+ while (!opj_tgt_decode(l_bio, l_prc->imsbtree, cblkno, (OPJ_INT32)i)) {
++i;
}
- l_cblk->numbps = l_band->numbps + 1 - i;
+ l_cblk->numbps = (OPJ_UINT32)l_band->numbps + 1 - i;
l_cblk->numlenbits = 3;
}
}
}
}
- n = l_cblk->numnewpasses;
+ n = (OPJ_INT32)l_cblk->numnewpasses;
do {
- l_cblk->segs[l_segno].numnewpasses = opj_int_min(l_cblk->segs[l_segno].maxpasses - l_cblk->segs[l_segno].numpasses, n);
+ l_cblk->segs[l_segno].numnewpasses = (OPJ_UINT32)opj_int_min((OPJ_INT32)(l_cblk->segs[l_segno].maxpasses - l_cblk->segs[l_segno].numpasses), n);
l_cblk->segs[l_segno].newlen = opj_bio_read(l_bio, l_cblk->numlenbits + opj_uint_floorlog2(l_cblk->segs[l_segno].numnewpasses));
- /* testcase 1802.pdf.SIGSEGV.36e.894 */
- if (l_cblk->segs[l_segno].newlen > *l_modified_length_ptr) {
- opj_bio_destroy(l_bio);
- return OPJ_FALSE;
- }
- n -= l_cblk->segs[l_segno].numnewpasses;
+ n -= (OPJ_INT32)l_cblk->segs[l_segno].numnewpasses;
if (n > 0) {
++l_segno;
}
}
- l_header_length = (l_header_data - *l_header_data_start);
+ l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
*l_modified_length_ptr -= l_header_length;
*l_header_data_start += l_header_length;
/* INDEX >> */
*p_is_data_present = OPJ_TRUE;
- *p_data_read = l_current_data - p_src_data;
+ *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
return OPJ_TRUE;
}
OPJ_BYTE* new_cblk_data = (OPJ_BYTE*) opj_realloc(l_cblk->data, l_cblk->data_current_size + l_seg->newlen);
if(! new_cblk_data) {
opj_free(l_cblk->data);
- l_cblk->data = NULL;
l_cblk->data_max_size = 0;
/* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to realloc code block cata!\n"); */
return OPJ_FALSE;
++l_band;
}
- *(p_data_read) = l_current_data - p_src_data;
+ *(p_data_read) = (OPJ_UINT32)(l_current_data - p_src_data);
return OPJ_TRUE;
}
do {
if (* p_data_read + l_seg->newlen > p_max_length) {
+ fprintf(stderr, "segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+ l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
return OPJ_FALSE;
}