[trunk] Revert r2623 for now
[openjpeg.git] / src / lib / openjp2 / t2.c
index 17d5b22c27a3d35013bd1224172341e0e57aeba8..480944dedacb82736fbec0bebbe6683fe9634d1d 100644 (file)
@@ -441,7 +441,8 @@ OPJ_BOOL opj_t2_decode_packets( opj_t2_t *p_t2,
 
         /* don't forget to release pi */
         opj_pi_destroy(l_pi,l_nb_pocs);
-        *p_data_read = l_current_data - p_src;
+        assert( l_current_data - p_src <  UINT32_MAX );
+        *p_data_read = (OPJ_UINT32)(l_current_data - p_src);
         return OPJ_TRUE;
 }
 
@@ -546,8 +547,13 @@ OPJ_BOOL opj_t2_encode_packet(  OPJ_UINT32 tileno,
                 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;
         }
@@ -670,7 +676,7 @@ OPJ_BOOL opj_t2_encode_packet(  OPJ_UINT32 tileno,
                 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;
 
@@ -734,7 +740,8 @@ OPJ_BOOL opj_t2_encode_packet(  OPJ_UINT32 tileno,
                 ++band;
         }
 
-        * p_data_written += (c - dest);
+        assert( c >= dest );
+        * p_data_written += (OPJ_UINT32)(c - dest);
 
         return OPJ_TRUE;
 }
@@ -870,7 +877,7 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
         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);
         }
 
@@ -894,7 +901,7 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
                         }
                 }
 
-                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;
 
@@ -907,7 +914,7 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
                 /* 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;
         }
 
@@ -983,11 +990,6 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
                         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].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;
                                 if (n > 0) {
@@ -1025,7 +1027,7 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
                 }
         }
 
-        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;
 
@@ -1038,7 +1040,7 @@ OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
         /* 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;
 }
@@ -1125,7 +1127,6 @@ OPJ_BOOL opj_t2_read_packet_data(   opj_t2_t* p_t2,
                                     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;
@@ -1162,7 +1163,7 @@ OPJ_BOOL opj_t2_read_packet_data(   opj_t2_t* p_t2,
                 ++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;
 }