[MINC-users] Segfault in dcm2mnc on PET data from the Siemens mCT

Flemming Littrup Andersen fling at pet.rh.dk
Tue Jul 26 06:20:00 EDT 2011


Hi Jerome,

This is stange - dcmodify -e "(0029,1010)" *.dcm works perfectly for
our mCT files. Maybe you could try just
dcmodify -ep *.dcm to remove all the Siemens private tags before convertion.

Best,
Flemming


2011/7/26 Jérôme Redouté <redoute at cermep.fr>:
> Dear all,
> We have the same issue regarding dcm2mnc conversion for PET images coming
> from Siemens mCT scanner.
> We tried the following command:
>
> dcmodify -e "(0029,1010)" *.dcm
>
> before to run dcm2minc, but it didn't fix the segfault crash.
> Any ideas on what we are doing wrong?
> Thanks for your help
> Jerome
>
>
>
>> We have been using dcm2mnc for many years to convert our Siemens PET
>> images to Minc. dcm2mnc is now failing with segfault after a scanner
>> upgrade to Siemens newest PET scanner, the mCT PET/CT with TOF. This
>> is the case both for minc 2.0 and 2.1.
>>
>> We have tried to localize the error - dcm2mnc is failing on a private
>> tag (0029,1010) not present in older Siemens implementations (VR is OB
>> accordint to Siemens Conformance statement) and we get the following:
>>
>>
>> Using dcm2mnc on the new Siemens PET images results in a segmentation
>> fault occuring at
>> line 487 in acr_io.c:
>>
>> 485      ptr1 = (char *) input_value;
>> 485      ptr2 = (char *) mach_value;
>> 486      for (i=0; i<nvals*value_size; i++) {
>> 487         ptr2[i] = ptr1[i];
>> 488      }
>>
>> The problem occurs in the acr_parse_siemens_proto2 call after having
>> obtained
>> a non-null element in dicom_to_minc.c, line 886:
>>
>> 886    element = acr_find_group_element(group_list, SPI_Protocol2);
>> 887    if (element != NULL) {
>> 888        group_list = parse_siemens_proto2(group_list, element);
>> 889    }
>>
>> acr_find_group_element(group_list, SPI_Protocol2) finds the
>> (group,element) pair
>> corresponding to SPI_Protocol2 (0029,1010) (see spi_element_defs.h). It
>> returns
>> an Acr_element if it exists and NULL if it does not.
>>
>>
>> The segmentation fault occurs in the call to
>>
>>   acr_get_long(ACR_LITTLE_ENDIAN, 1, byte_ptr + byte_pos,&len);
>>
>> in dicom_to_minc.c:803 during the second iteration of the loop.
>> The update in line 813
>>
>> 813     byte_pos += ((len + 3) / 4) * 4;
>>
>> causes byte_pos to become very large (overflow?), which may be the
>> source of the segfault.
>>
>>
>> A quick fix is to delete the tag (0029,1010) using standard dicom
>> tools or f.eks Osirix, Uncommenting of the parse_siemens_proto code
>> will also work.
>> Any suggestens is welcome, I will be happy to test and can also
>> provide testdata to anyone interested into looking into this.
>>
>> Best regards,
>> Flemming
>>
>> --
>> Flemming Littrup Andersen, Ph.D
>> Rigshospitalet Copenhagen, Dep. PET-3982
>> Phone: +45 3545-8143
>> Mobile: +45 2615-7368
>
>
> --
> ==================================================================
> Jérôme Redouté
> Ph.D. - Ingénieur de Recherche - Université Claude Bernard - Lyon1
> CERMEP - Imagerie du vivant
> Centre d'Etude et de Recherche Multimodal Et Pluridisciplinaire
> 59 Bd Pinel
> 69677 Bron - FRANCE
> tel : 33 (0)4 72 68 86 13 (bureau)
> tel : 33 (0)4 72 68 86 00 (standard)
> fax : 33 (0)4 72 68 86 10
> ==================================================================
>
> _______________________________________________
> MINC-users at bic.mni.mcgill.ca
> http://www.bic.mni.mcgill.ca/mailman/listinfo/minc-users
>
>



-- 
Flemming Littrup Andersen, Ph.D
Rigshospitalet Copenhagen, Dep. PET-3982
Phone: +45 3545-8143
Mobile: +45 2615-7368


More information about the MINC-users mailing list