]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2016-03-13 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Mar 2016 17:38:07 +0000 (17:38 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 13 Mar 2016 17:38:07 +0000 (17:38 +0000)
    Jim MacArthur  <jim.macarthur@codethink.co.uk>

PR fortran/69043
* scanner.c (load_file): Check that included file is regular.

PR fortran/69043
* gfortran.dg/include_9.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234169 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/scanner.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/include_9.f90 [new file with mode: 0644]

index 9d3f200d1c739beb0e8f399d25c1a4e8023010a2..9ed112ec63163ff71700f08bc1f277768977070e 100644 (file)
@@ -1,3 +1,9 @@
+2016-03-13  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+           Jim MacArthur  <jim.macarthur@codethink.co.uk>
+
+       PR fortran/69043
+       * scanner.c (load_file): Check that included file is regular.
+
 2016-03-12  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
            Harold Anlauf  <anlauf@gmx.de>
 
index c4e7974ed4a5a2aecfaaa36eaff9ddea3bb9aae4..33d96d88d922ca5b06f67cb0f5b8841efcc27ccd 100644 (file)
@@ -2200,6 +2200,8 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
   FILE *input;
   int len, line_len;
   bool first_line;
+  struct stat st;
+  int stat_result;
   const char *filename;
   /* If realfilename and displayedname are different and non-null then
      surely realfilename is the preprocessed form of
@@ -2227,6 +2229,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
        }
       else
        input = gfc_open_file (realfilename);
+
       if (input == NULL)
        {
          gfc_error_now ("Can't open file %qs", filename);
@@ -2242,6 +2245,15 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
                   current_file->filename, current_file->line, filename);
          return false;
        }
+      stat_result = stat (realfilename, &st);
+      if (stat_result == 0 && !(st.st_mode & S_IFREG))
+       {
+         fprintf (stderr, "%s:%d: Error: Included path '%s'"
+                  " is not a regular file\n",
+                  current_file->filename, current_file->line, filename);
+         fclose (input);
+         return false;
+       }
     }
 
   /* Load the file.
index d52e69be80cdbedaf85be2ba3c35293ae4de9e87..78e3ec9e27280310af1fd245ad25680788631e57 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-13  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/69043
+       * gfortran.dg/include_9.f90: New test.
+
 2016-03-13  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
        PR fortran/45076
diff --git a/gcc/testsuite/gfortran.dg/include_9.f90 b/gcc/testsuite/gfortran.dg/include_9.f90
new file mode 100644 (file)
index 0000000..c4ef50f
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! PR69043 Trying to include a directory causes an infinite loop
+      include '.'
+      program main
+      end program
+! { dg-error "is not a regular file" " " { target *-*-* } 3 }