although I think that those other issues you've mentioned are not
related to this bug, fixes for those are in patch you can find attached

-- 
Yaroslav Halchenko
Research Assistant, Psychology Department, Rutgers-Newark
Student  Ph.D. @ CS Dept. NJIT
Office: (973) 353-5440x263 | FWD: 82823 | Fax: (973) 353-1171
        101 Warren Str, Smith Hall, Rm 4-105, Newark NJ 07102
WWW:     http://www.linkedin.com/in/yarik        
diff -x changelog -Naur nifticlib-0.6/fsliolib/fslio.c nifticlib-0.6.modified/fsliolib/fslio.c
--- nifticlib-0.6/fsliolib/fslio.c	2007-11-05 11:25:40.000000000 -0500
+++ nifticlib-0.6.modified/fsliolib/fslio.c	2007-11-05 10:52:13.000000000 -0500
@@ -198,13 +198,16 @@
   int retval=-1;
   if (fname==NULL) return retval;
   flen = strlen(fname);
+  /* [EMAIL PROTECTED] had to group conditions to avoid possible
+   * illegal memory read-ins */
   if (flen<5) return retval;  /* smallest name + extension is a.nii */
   if (strcmp(fname + flen - 4,".nii")==0)  retval=FSL_TYPE_NIFTI;
-  if (strcmp(fname + flen - 7,".nii.gz")==0)  retval=FSL_TYPE_NIFTI_GZ;
   if (strcmp(fname + flen - 4,".mnc")==0)  retval=FSL_TYPE_MINC;
-  if (strcmp(fname + flen - 7,".mnc.gz")==0)  retval=FSL_TYPE_MINC;
   if (strcmp(fname + flen - 4,".hdr")==0)  retval=FSL_TYPE_NIFTI_PAIR;
   if (strcmp(fname + flen - 4,".img")==0)  retval=FSL_TYPE_NIFTI_PAIR;
+  if ((retval==-1) && (flen<8)) return retval; /* small name + ext.gz is a.nii.gz */
+  if (strcmp(fname + flen - 7,".nii.gz")==0)  retval=FSL_TYPE_NIFTI_GZ;
+  if (strcmp(fname + flen - 7,".mnc.gz")==0)  retval=FSL_TYPE_MINC;
   if (strcmp(fname + flen - 7,".hdr.gz")==0)  retval=FSL_TYPE_NIFTI_PAIR_GZ;
   if (strcmp(fname + flen - 7,".img.gz")==0)  retval=FSL_TYPE_NIFTI_PAIR_GZ;
   if ( (retval==FSL_TYPE_NIFTI_PAIR) || (retval==FSL_TYPE_NIFTI_PAIR_GZ) ) {
@@ -290,10 +293,10 @@
   basename = nifti_makebasename(fname);
   blen = strlen(basename);
 #ifdef HAVE_ZLIB
-  if (strcmp(basename + blen-7,".mnc.gz") == 0) 
+  if ((blen>7) && (strcmp(basename + blen-7,".mnc.gz") == 0))
     { basename[blen-7]='\0'; return basename; }
 #endif
-  if (strcmp(basename + blen-4,".mnc") == 0) 
+  if ((blen>4) && (strcmp(basename + blen-4,".mnc") == 0))
     { basename[blen-4]='\0'; return basename; }
   return basename;
 }

Reply via email to