[cig-commits] r14360 - mc/3D/CitcomS/trunk/lib

tan2 at geodynamics.org tan2 at geodynamics.org
Mon Mar 16 17:18:09 PDT 2009


Author: tan2
Date: 2009-03-16 17:18:09 -0700 (Mon, 16 Mar 2009)
New Revision: 14360

Modified:
   mc/3D/CitcomS/trunk/lib/Full_read_input_from_files.c
   mc/3D/CitcomS/trunk/lib/Full_version_dependent.c
   mc/3D/CitcomS/trunk/lib/Initial_temperature.c
   mc/3D/CitcomS/trunk/lib/Lith_age.c
   mc/3D/CitcomS/trunk/lib/Material_properties.c
   mc/3D/CitcomS/trunk/lib/Output_gzdir.c
   mc/3D/CitcomS/trunk/lib/Problem_related.c
   mc/3D/CitcomS/trunk/lib/Regional_read_input_from_files.c
   mc/3D/CitcomS/trunk/lib/Regional_sphere_related.c
   mc/3D/CitcomS/trunk/lib/Regional_version_dependent.c
Log:
Check return values of sscanf/fscanf. This fixs issue265.


Modified: mc/3D/CitcomS/trunk/lib/Full_read_input_from_files.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Full_read_input_from_files.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Full_read_input_from_files.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -232,11 +232,17 @@
 	  VB2[i]=(float*) malloc ((nnn+1)*sizeof(float));
 	}
 	for(i=1;i<=nnn;i++)   {
-	  fscanf(fp1,"%f %f",&(VB1[1][i]),&(VB1[2][i]));
+          if(fscanf(fp1,"%f %f",&(VB1[1][i]),&(VB1[2][i])) != 2) {
+            fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+            exit(8);
+          }
 	  VB1[1][i] *= E->data.timedir;
 	  VB1[2][i] *= E->data.timedir;
 	  if (pos_age) {
-	    fscanf(fp2,"%f %f",&(VB2[1][i]),&(VB2[2][i]));
+            if(fscanf(fp2,"%f %f",&(VB2[1][i]),&(VB2[2][i])) != 2) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+              exit(8);
+            }
 	    VB2[1][i] *= E->data.timedir;
 	    VB2[2][i] *= E->data.timedir;
 	  }
@@ -281,9 +287,15 @@
 	for(i=1;i<=noy;i++)
 	  for(j=1;j<=nox;j++) {
 	    node=j+(i-1)*nox;
-	    fscanf(fp1,"%f",&inputage1);
+	    if(fscanf(fp1,"%f",&inputage1) != 1) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+              exit(8);
+            }
 	    if (pos_age) { /* positive ages - we must interpolate */
-              fscanf(fp2,"%f",&inputage2);
+              if(fscanf(fp2,"%f",&inputage2) != 1) {
+                fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+                exit(8);
+              }
               E->age_t[node] = (inputage1 + (inputage2-inputage1)/(newage2-newage1)*(age-newage1))/E->data.scalet;
 	    }
 	    else { /* negative ages - don't do the interpolation */
@@ -319,8 +331,14 @@
             }
           }
           for(i=1;i<=emax;i++)  {
-               fscanf(fp1,"%d %d %f", &nn,&(LL1[i]),&(VIP1[i]));
-               fscanf(fp2,"%d %d %f", &nn,&(LL2[i]),&(VIP2[i]));
+            if(fscanf(fp1,"%d %d %f", &nn,&(LL1[i]),&(VIP1[i])) != 3) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+              exit(8);
+            }
+            if(fscanf(fp2,"%d %d %f", &nn,&(LL2[i]),&(VIP2[i])) != 3) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+              exit(8);
+            }
           }
 
           fclose(fp1);
@@ -366,9 +384,15 @@
 	TB2=(float*) malloc ((nnn+1)*sizeof(float));
 
 	for(i=1;i<=nnn;i++)   {
-	  fscanf(fp1,"%f",&(TB1[i]));
+          if(fscanf(fp1,"%f",&(TB1[i])) != 1) {
+            fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+            exit(8);
+          }
 	  if (pos_age) {
-	    fscanf(fp2,"%f",&(TB2[i]));
+            if(fscanf(fp2,"%f",&(TB2[i])) != 1) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+              exit(8);
+            }
 	  }
         }
 	fclose(fp1);

Modified: mc/3D/CitcomS/trunk/lib/Full_version_dependent.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Full_version_dependent.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Full_version_dependent.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -113,7 +113,10 @@
     }
     fscanf(fp1,"%s %d",a,&i);
     for (k=1;k<=E->mesh.noz;k++)  {
-      fscanf(fp1,"%d %f",&nn,&tt1);
+      if(fscanf(fp1,"%d %f",&nn,&tt1) != 2) {
+        fprintf(stderr,"Error while reading file '%s'\n",output_file);
+        exit(8);
+      }
       rr[k]=tt1;
     }
 

Modified: mc/3D/CitcomS/trunk/lib/Initial_temperature.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Initial_temperature.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Initial_temperature.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -260,8 +260,10 @@
     sscanf(input_s,"%d %d",&ll,&mm);
     for(i=1;i<=E->lmesh.nno;i++)  {
       fgets(input_s,1000,fp);
-      sscanf(input_s,"%g %g %g %f",&(v1),&(v2),&(v3),&(g));
-
+      if(sscanf(input_s,"%g %g %g %f",&(v1),&(v2),&(v3),&(g)) != 4) {
+        fprintf(stderr,"Error while reading file '%s'\n", output_file);
+        exit(8);
+      }
       /* Truncate the temperature to be within (0,1). */
       /* This might not be desirable in some situations. */
       E->T[m][i] = max(0.0,min(g,1.0));

Modified: mc/3D/CitcomS/trunk/lib/Lith_age.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Lith_age.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Lith_age.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -103,7 +103,10 @@
     for(i=1;i<=gnoy;i++)
       for(j=1;j<=gnox;j++) {
 	node=j+(i-1)*gnox;
-	fscanf(fp1,"%f",&(E->age_t[node]));
+	if(fscanf(fp1,"%f",&(E->age_t[node])) != 1) {
+          fprintf(stderr,"Error while reading file '%s'\n",output_file);
+          exit(8);
+        }
 	E->age_t[node]=E->age_t[node]*E->data.scalet;
       }
     fclose(fp1);

Modified: mc/3D/CitcomS/trunk/lib/Material_properties.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Material_properties.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Material_properties.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -129,15 +129,17 @@
 
     for(i=1; i<=E->lmesh.noz; i++) {
         fgets(buffer, 255, fp);
-        sscanf(buffer, "%lf %lf %lf %lf %lf %lf %lf\n",
-               &(E->refstate.rho[i]),
-               &(E->refstate.gravity[i]),
-               &(E->refstate.thermal_expansivity[i]),
-               &(E->refstate.heat_capacity[i]),
-               &not_used1,
-               &not_used2,
-               &not_used3);
-
+        if(sscanf(buffer, "%lf %lf %lf %lf %lf %lf %lf\n",
+                  &(E->refstate.rho[i]),
+                  &(E->refstate.gravity[i]),
+                  &(E->refstate.thermal_expansivity[i]),
+                  &(E->refstate.heat_capacity[i]),
+                  &not_used1,
+                  &not_used2,
+                  &not_used3) != 7) {
+            fprintf(stderr,"Error while reading file '%s'\n", E->refstate.filename);
+            exit(8);
+        }
         /**** debug ****
         fprintf(stderr, "%d %f %f %f %f\n",
                 i,

Modified: mc/3D/CitcomS/trunk/lib/Output_gzdir.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output_gzdir.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Output_gzdir.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -1224,7 +1224,8 @@
     for(m=1;m <= E->sphere.caps_per_proc;m++) {
       fscanf(fp,"%i %i",&ll,&mm);
       for(i=1;i<=E->lmesh.nno;i++)  {
-	fscanf(fp,"%f %f %f %f",&v1,&v2,&v3,&g);
+        if(fscanf(fp,"%f %f %f %f",&v1,&v2,&v3,&g) != 4)
+	  myerror(E,"restart velo read error 1");
 	/*  E->sphere.cap[m].V[1][i] = v1;
 	    E->sphere.cap[m].V[1][i] = v2;
 	    E->sphere.cap[m].V[1][i] = v3;  */

Modified: mc/3D/CitcomS/trunk/lib/Problem_related.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Problem_related.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Problem_related.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -118,7 +118,10 @@
 	exit(8);
       }
       fgets(input_s,1000,fp);
-      sscanf(input_s,"%d %d %f",&ll,&mm,&E->monitor.elapsed_time);
+      if(sscanf(input_s,"%d %d %f",&ll,&mm,&E->monitor.elapsed_time) != 3) {
+        fprintf(stderr,"Error while reading file '%s'\n", output_file);
+        exit(8);
+      }
       fclose(fp);
 #ifdef USE_GZDIR
       if(rezip)

Modified: mc/3D/CitcomS/trunk/lib/Regional_read_input_from_files.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Regional_read_input_from_files.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Regional_read_input_from_files.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -237,11 +237,17 @@
         VB2[i]=(float*) malloc ((nnn+1)*sizeof(float));
       }
       for(i=1;i<=nnn;i++)   {
-         fscanf(fp1,"%f %f",&(VB1[1][i]),&(VB1[2][i]));
+         if(fscanf(fp1,"%f %f",&(VB1[1][i]),&(VB1[2][i])) != 2) {
+           fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+           exit(8);
+         }
          VB1[1][i]=E->data.timedir*VB1[1][i];
          VB1[2][i]=E->data.timedir*VB1[2][i];
          if (pos_age) {
-             fscanf(fp2,"%f %f",&(VB2[1][i]),&(VB2[2][i]));
+             if(fscanf(fp2,"%f %f",&(VB2[1][i]),&(VB2[2][i])) != 2) {
+                 fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+                 exit(8);
+             }
              VB2[1][i]=E->data.timedir*VB2[1][i];
              VB2[2][i]=E->data.timedir*VB2[2][i];
          }
@@ -286,9 +292,15 @@
         for(i=1;i<=noy;i++)
           for(j=1;j<=nox;j++) {
             node=j+(i-1)*nox;
-            fscanf(fp1,"%f",&inputage1);
+            if(fscanf(fp1,"%f",&inputage1) != 1) {
+              fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+              exit(8);
+            }
             if (pos_age) { /* positive ages - we must interpolate */
-              fscanf(fp2,"%f",&inputage2);
+              if(fscanf(fp2,"%f",&inputage2) != 1) {
+                fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+                exit(8);
+              }
               E->age_t[node] = (inputage1 + (inputage2-inputage1)/(newage2-newage1)*(age-newage1))/E->data.scalet;
             }
             else { /* negative ages - don't do the interpolation */
@@ -322,8 +334,14 @@
             }
           }
           for(i=1;i<=emax;i++)  {
-               fscanf(fp1,"%d %d %f", &nn,&(LL1[i]),&(VIP1[i]));
-               fscanf(fp2,"%d %d %f", &nn,&(LL2[i]),&(VIP2[i]));
+              if(fscanf(fp1,"%d %d %f", &nn,&(LL1[i]),&(VIP1[i])) != 3) {
+                  fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+                  exit(8);
+              }
+              if(fscanf(fp2,"%d %d %f", &nn,&(LL2[i]),&(VIP2[i])) != 3) {
+                  fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+                  exit(8);
+              }
           }
 
           fclose(fp1);
@@ -365,11 +383,17 @@
       TB2=(float*) malloc ((nnn+1)*sizeof(float));
 
       for(i=1;i<=nnn;i++)   {
-         fscanf(fp1,"%f",&(TB1[i]));
+        if(fscanf(fp1,"%f",&(TB1[i])) != 1) {
+          fprintf(stderr,"Error while reading file '%s'\n",output_file1);
+          exit(8);
+        }
          /* if( E->parallel.me == 0)  
         fprintf(stderr, "\nINSIDE regional_read_input_files_for_timesteps TB1=%f %d\n",TB1[i],i); */
          if (pos_age) {
-             fscanf(fp2,"%f",&(TB2[i]));
+             if(fscanf(fp2,"%f",&(TB2[i])) != 1) {
+                 fprintf(stderr,"Error while reading file '%s'\n",output_file2);
+                 exit(8);
+             }
          }
       }
       fclose(fp1);

Modified: mc/3D/CitcomS/trunk/lib/Regional_sphere_related.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Regional_sphere_related.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Regional_sphere_related.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -101,14 +101,20 @@
 
     fscanf(fp,"%s %d",a,&nn);
     for(i=1;i<=gnox;i++) {
-      fscanf(fp,"%d %e",&nn,&theta1[E->mesh.gridmax][i]);
+        if(fscanf(fp,"%d %e",&nn,&theta1[E->mesh.gridmax][i]) != 2) {
+            fprintf(E->fp,"Error while reading coor_file '%s'\n",output_file);
+            exit(8);
+        }
     }
     E->control.theta_min = theta1[E->mesh.gridmax][1];
     E->control.theta_max = theta1[E->mesh.gridmax][gnox];
     
     fscanf(fp,"%s %d",a,&nn);
     for(i=1;i<=gnoy;i++)  {
-      fscanf(fp,"%d %e",&nn,&fi1[E->mesh.gridmax][i]);
+        if(fscanf(fp,"%d %e",&nn,&fi1[E->mesh.gridmax][i]) != 2) {
+            fprintf(E->fp,"Error while reading coor_file '%s'\n",output_file);
+            exit(8);
+        }
     }
     E->control.fi_min = fi1[E->mesh.gridmax][1];
     E->control.fi_max = fi1[E->mesh.gridmax][gnoy];

Modified: mc/3D/CitcomS/trunk/lib/Regional_version_dependent.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Regional_version_dependent.c	2009-03-17 00:17:04 UTC (rev 14359)
+++ mc/3D/CitcomS/trunk/lib/Regional_version_dependent.c	2009-03-17 00:18:09 UTC (rev 14360)
@@ -94,7 +94,10 @@
 
     fscanf(fp1,"%s %d",a,&i);
     for (k=1;k<=E->mesh.noz;k++)  {
-      fscanf(fp1,"%d %f",&nn,&tt1);
+      if(fscanf(fp1,"%d %f",&nn,&tt1) != 2) {
+        fprintf(stderr,"Error while reading file '%s'\n",output_file);
+        exit(8);
+      }
       rr[k]=tt1;
     }
     E->sphere.ri = rr[1];



More information about the CIG-COMMITS mailing list