Working on this bug is a bit difficult as it seems that there are
currently no Debian ARM machines available.

Thanks to the excellent work of Dominique Belhachemi, who has setup
an ARM system using qemu, there is now the chance of actually trying
to track down this bug.

        see http://www.aurel32.net/info/debian_arm_qemu.php

There have been a number of mails between Dominique and me, but
unfortunately they are all in German. I'll try to provide a
(hopefully) comprehensive summary of what we know so far.

@Dominique: Let's switch to English and keep [EMAIL PROTECTED]
            CC'ed.

Ok, here we go:


* In contrast to the buildd-logs exactly the tests that fail for version
  0.5 also fail for version 0.6. The only difference seems to be that
  the emulated ARM system uses a different kernel (2.6.8.15).

* It doesn't matter if etch or a current sid is used, the same tests
  fail with the same error message.

* The error message for all tests using nifti1_test is:

        ** failed to alloc 1140850688 bytes for image data

  all other tests fail, because they depend on the output of
  nifti1_test.

* Simply loading an image with 'nifti1_test' on ARM, causes the above
  error. 'nifti1_test' does not do any particular magic. It only calls a
  single library function to load the test image.

* The ultimate reason for the error is an incorrect calculation of the
  number of voxels (volume elements) in the image data. This number is
  used to allocate the necessary amount of memory required to load the
  image data.

  'nvox' calculated in

        size_t nifti_get_volsize(const nifti_image 
*nim):niftilib/nifti1_io.c:2177

  should be 90321 (product of volume extent along all dims:
  23*17*11*7*3), but actually is not, because the 'dim' array contains
  wrong values.

  Dominique discovered that the content of this array is correct until

  nim = nifti_convert_nhdr2nim(nhdr,hfile); in niftilib/nifti1_io.c:3683

  is executed. Apparently the content is modified, in this code snippet

        3059 nifti_image* nifti_convert_nhdr2nim(struct nifti_1_header nhdr,
        3060                                    const char * fname)
        3061 {
        3062    int   ii , doswap , ioff ;
        3063    int   is_nifti , is_onefile ;
        3064    nifti_image *nim;
        3065
        3066    nim = (nifti_image *) calloc( 1 , sizeof(nifti_image) ) ;

  it remains intact until line 3066 is executed (is that correct
  Dominique?)

  If this is the case, one possible cause of the bug could be that the
  library accidentally frees some memory (somewhere in the chain) that
  belongs to the dim array.


So far,


Michael

-- 
GPG key:  1024D/3144BE0F Michael Hanke
http://apsy.gse.uni-magdeburg.de/hanke
ICQ: 48230050

Attachment: signature.asc
Description: Digital signature

Reply via email to