ferdymercury / amide

AMIDE: a Medical Imaging Data Examiner
http://amide.sourceforge.net/
GNU General Public License v2.0
19 stars 12 forks source link

overflow when opening 4 GiB raw file #8

Open ferdymercury opened 2 years ago

ferdymercury commented 2 years ago

Opening Raw Data File fails if data are bigger or equal to 4 GiB leads to a buggy number of bytes to be read.

image

This diff fixes this number:


---------------------- amide-current/src/amitk_raw_data.h ----------------------
index 3b1c397..7a3a306 100644
@@ -191,3 +191,3 @@ AmitkRawFormat amitk_format_to_raw_format(AmitkFormat data_format);
 #define amitk_raw_format_calc_num_bytes_per_slice(dim, raw_format) ((dim).x*(dim).y*amitk_raw_format_sizes[raw_format])
-#define amitk_raw_format_calc_num_bytes(dim, raw_format) ((dim).z*(dim).g*(dim).t*amitk_raw_format_calc_num_bytes_per_slice(dim,raw_format))
+#define amitk_raw_format_calc_num_bytes(dim, raw_format) (1ULL*(dim).z*(dim).g*(dim).t*amitk_raw_format_calc_num_bytes_per_slice(dim,raw_format))

However one then get's a SEGV at:

        AMITK_RAW_DATA_USHORT_SET_CONTENT(raw_data,i) =
          GUINT16_FROM_LE(DATA_CONTENT(data, dim, i));

In contrast, latest ImageJ has no problem in opening this dataset.

ferdymercury commented 2 years ago

Tried with

--------------- amide-current/src/amitk_raw_data_variable_type.h ---------------
index 0075f2c..e0eba9a 100644
@@ -45,3 +45,3 @@
   (((amitk_format_`'m4_Variable_Type`'_t *) (amitk_raw_data)->data)+ \
-   ((((((((((i).t) * ((amitk_raw_data)->dim.g)) + \
+   ((((((((1ULL*((i).t) * ((amitk_raw_data)->dim.g)) + \
       (i).g) * ((amitk_raw_data)->dim.z)) + \

but still crashes.