diff --git a/drivers/iohb.c b/drivers/iohb.c
index c4aec8d7207987ee541cd40180e041b61eb6a215..ebc849511960d4f8cdbd3ea7d41361aba3bac824 100644
--- a/drivers/iohb.c
+++ b/drivers/iohb.c
@@ -1066,6 +1066,7 @@ int readHB_mat_char(const char* filename, int colptr[], int rowind[],
         }
     }
 
+    fclose(in_file);
     return 1;
 }
 
@@ -1162,12 +1163,14 @@ int readHB_aux_char(const char* filename, const char AuxType, char b[])
     if (Nrhs <= 0)
     {
         fprintf(stderr, "Warn: Attempt to read auxillary vector(s) when none are present.\n");
+        fclose(in_file);
         return 0;
     }
     if (Rhstype[0] != 'F' )
     {
         fprintf(stderr,"Warn: Attempt to read auxillary vector(s) which are not stored in Full form.\n");
         fprintf(stderr,"       Rhs must be specified as full. \n");
+        fclose(in_file);
         return 0;
     }
 
@@ -1185,10 +1188,12 @@ int readHB_aux_char(const char* filename, const char AuxType, char b[])
 
     if ( AuxType == 'G' && Rhstype[1] != 'G' ) {
         fprintf(stderr, "Warn: Attempt to read auxillary Guess vector(s) when none are present.\n");
+        fclose(in_file);
         return 0;
     }
     if ( AuxType == 'X' && Rhstype[2] != 'X' ) {
         fprintf(stderr, "Warn: Attempt to read auxillary eXact solution vector(s) when none are present.\n");
+        fclose(in_file);
         return 0;
     }
 
@@ -1276,10 +1281,8 @@ int readHB_aux_char(const char* filename, const char AuxType, char b[])
                 col = 0;
             }
         }
-
     }
 
-
     fclose(in_file);
     return Nrhs;
 }
@@ -1505,19 +1508,24 @@ int ParseIfmt(char* fmt, int* perline, int* width)
     /*  width and number of elements per line.       */
     /*************************************************/
     char *tmp;
+    *perline = 0; *width = 0;
     if (fmt == NULL ) {
-        *perline = 0; *width = 0; return 0;
+        return 0;
     }
     upcase(fmt);
     tmp = strchr(fmt,'(');
-    tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,'I') - tmp - 1);
-    *perline = atoi(tmp);
-    if (tmp) free(tmp);
+    if (tmp) {
+        tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,'I') - tmp - 1);
+        *perline = atoi(tmp);
+        free(tmp);
+    }
 
     tmp = strchr(fmt,'I');
-    tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,')') - tmp - 1);
-    *width = atoi(tmp);
-    if (tmp) free(tmp);
+    if (tmp) {
+        tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,')') - tmp - 1);
+        *width = atoi(tmp);
+        free(tmp);
+    }
 
     return *width;
 }
@@ -1535,9 +1543,9 @@ int ParseRfmt(char* fmt, int* perline, int* width, int* prec, char* flag)
     char* tmp3;
     int len;
 
+    *perline = 0;
+    *width = 0;
     if (fmt == NULL ) {
-        *perline = 0;
-        *width = 0;
         flag = NULL;
         return 0;
     }
@@ -1580,18 +1588,25 @@ int ParseRfmt(char* fmt, int* perline, int* width, int* prec, char* flag)
     tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,*flag) - tmp - 1);
     *perline = atoi(tmp);
     free(tmp);
-    tmp = strchr(fmt,*flag);
-    if ( strchr(fmt,'.') ) {
-        char *tmp2 = substr( fmt, strchr(fmt,'.') - fmt + 1, strchr(fmt,')') - strchr(fmt,'.')-1);
-        *prec = atoi( tmp2 );
-        if (tmp2) free(tmp2);
-        tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,'.') - tmp - 1);
-    } else {
-        tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,')') - tmp - 1);
+    {
+        char c;
+        if ( strchr(fmt,'.') ) {
+            char *tmp2 = substr( fmt, strchr(fmt,'.') - fmt + 1, strchr(fmt,')') - strchr(fmt,'.')-1);
+            if (tmp2) {
+                *prec = atoi( tmp2 );
+                free(tmp2);
+            }
+            c = '.';
+        } else {
+            c = ')';
+        }
+        tmp = strchr(fmt,*flag);
+        if (tmp) {
+            tmp = substr(fmt,tmp - fmt + 1, strchr(fmt,c) - tmp - 1);
+            *width = atoi(tmp);
+            free(tmp);
+        }
     }
-    *width = atoi(tmp);
-
-    if (tmp) free(tmp);
     return *width;
 }
 
diff --git a/drivers/laplacian.c b/drivers/laplacian.c
index 03a25dbb66b806209ab1436fe80a49f5aec4d40e..6c94a5ee5bd86b01eff057ac015ee1ee0c91293e 100644
--- a/drivers/laplacian.c
+++ b/drivers/laplacian.c
@@ -92,7 +92,7 @@ laplacian_parse_info( const char   *filename,
         char flt;
         char *tmpf = strdup( filename );
 
-        if ( sscanf( filename, "%c:%s", &flt, tmpf ) == 2 ) {
+        if ( sscanf( filename, "%c:%256s", &flt, tmpf ) == 2 ) {
             filename += 2;
             switch( flt ){
             case 'Z':
diff --git a/drivers/mmio.c b/drivers/mmio.c
index 809b86dac008eeba6c8b089d52c2e5c2d482a11c..a966218f73f11fee6fe465491ac76c1ea4e92c2b 100644
--- a/drivers/mmio.c
+++ b/drivers/mmio.c
@@ -113,7 +113,7 @@ int mm_read_banner(FILE *f, MM_typecode *matcode)
     if (fgets(line, MM_MAX_LINE_LENGTH, f) == NULL)
         return MM_PREMATURE_EOF;
 
-    if (sscanf(line, "%s %s %s %s %s", banner, mtx, crd, data_type,
+    if (sscanf(line, "%63s %63s %63s %63s %63s", banner, mtx, crd, data_type,
         storage_scheme) != 5)
         return MM_PREMATURE_EOF;
 
@@ -347,17 +347,21 @@ int mm_read_mtx_crd(char *fname, int *M, int *N, int *nz, int **row, int **col,
     if ((f = fopen(fname, "r")) == NULL)
         return MM_COULD_NOT_READ_FILE;
 
-
-    if ((ret_code = mm_read_banner(f, matcode)) != 0)
+    if ((ret_code = mm_read_banner(f, matcode)) != 0) {
+        if (f != stdin) fclose(f);
         return ret_code;
-
-    if (!(mm_is_valid(*matcode) && mm_is_sparse(*matcode) &&
-            mm_is_matrix(*matcode)))
+    }
+    if (!(mm_is_valid(*matcode)  &&
+          mm_is_sparse(*matcode) &&
+          mm_is_matrix(*matcode)) )
+    {
+        if (f != stdin) fclose(f);
         return MM_UNSUPPORTED_TYPE;
-
-    if ((ret_code = mm_read_mtx_crd_size(f, M, N, nz)) != 0)
+    }
+    if ((ret_code = mm_read_mtx_crd_size(f, M, N, nz)) != 0) {
+        if (f != stdin) fclose(f);
         return ret_code;
-
+    }
 
     *row = (int *)  malloc(*nz * sizeof(int));
     *col = (int *)  malloc(*nz * sizeof(int));
@@ -368,21 +372,30 @@ int mm_read_mtx_crd(char *fname, int *M, int *N, int *nz, int **row, int **col,
         *val = (double *) malloc(*nz * 2 * sizeof(double));
         ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *row, *col, *val,
                 *matcode);
-        if (ret_code != 0) return ret_code;
+        if (ret_code != 0) {
+            if (f != stdin) fclose(f);
+            return ret_code;
+        }
     }
     else if (mm_is_real(*matcode))
     {
         *val = (double *) malloc(*nz * sizeof(double));
         ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *row, *col, *val,
                 *matcode);
-        if (ret_code != 0) return ret_code;
+        if (ret_code != 0) {
+            if (f != stdin) fclose(f);
+            return ret_code;
+        }
     }
 
     else if (mm_is_pattern(*matcode))
     {
         ret_code = mm_read_mtx_crd_data(f, *M, *N, *nz, *row, *col, *val,
                 *matcode);
-        if (ret_code != 0) return ret_code;
+        if (ret_code != 0) {
+            if (f != stdin) fclose(f);
+            return ret_code;
+        }
     }
 
     if (f != stdin) fclose(f);
diff --git a/drivers/readijv.c b/drivers/readijv.c
index 0e619fdba861c7f27ec046c50f00cfd835661ba1..ba3c7d8be3d9c8a1fa7ffe00f80c4db1c35210c9 100644
--- a/drivers/readijv.c
+++ b/drivers/readijv.c
@@ -121,10 +121,12 @@ readIJV( const char   *dirname,
         if (hdrfile == NULL)
         {
             fprintf(stderr,"readijv: Cannot open the header file (%s)\n", filename);
+            free(filename);
             return PASTIX_ERR_BADPARAMETER;
         }
         threeFilesReadHeader(hdrfile, &Nrow, &Ncol, &Nnzero);
         fclose(hdrfile);
+        free(filename);
     }
 
     spm->gN      = Ncol;
@@ -144,6 +146,7 @@ readIJV( const char   *dirname,
         free(filename);
         return PASTIX_ERR_BADPARAMETER;
     }
+    free(filename);
 
     sprintf(filename,"%s/ja_threeFiles",dirname);
     jafile = fopen(filename,"r");
@@ -154,6 +157,7 @@ readIJV( const char   *dirname,
         free(filename);
         return PASTIX_ERR_BADPARAMETER;
     }
+    free(filename);
 
     sprintf(filename,"%s/ra_threeFiles",dirname);
     rafile = fopen(filename,"r");
@@ -165,6 +169,7 @@ readIJV( const char   *dirname,
         free(filename);
         return PASTIX_ERR_BADPARAMETER;
     }
+    free(filename);
 
     /* Read the files */
     tempcol = spm->colptr;
@@ -194,6 +199,5 @@ readIJV( const char   *dirname,
     fclose(iafile);
     fclose(jafile);
     fclose(rafile);
-    free(filename);
     return PASTIX_SUCCESS;
 }