PR libfortran/64770 Segfault when trying to open existing file with status="new".
authorJanne Blomqvist <jb@gcc.gnu.org>
Sat, 24 Jan 2015 21:52:34 +0000 (23:52 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Sat, 24 Jan 2015 21:52:34 +0000 (23:52 +0200)
libgfortran ChangeLog:

2015-01-24  Janne Blomqvist  <jb@gcc.gnu.org>

PR libfortran/64770
* io/unit.c (filename_from_unit): Check that u->filename != NULL
before calling strdup.

testsuite ChangeLog:

2015-01-24  Janne Blomqvist  <jb@gcc.gnu.org>

PR libfortran/64770
* gfortran.dg/open_new_segv.f90: New test.

From-SVN: r220086

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/open_new_segv.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/unit.c

index 8b3dfc41b64c242b127b1796ecc69e1cd6c5b210..b342a33211d1e3c6a3075e1c5078c56e152f1c59 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-24  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR libfortran/64770
+       * gfortran.dg/open_new_segv.f90: New test.
+
 2015-01-24  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/49263
diff --git a/gcc/testsuite/gfortran.dg/open_new_segv.f90 b/gcc/testsuite/gfortran.dg/open_new_segv.f90
new file mode 100644 (file)
index 0000000..56cd1af
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do run }
+! PR 64770 SIGSEGV when trying to open an existing file with status="new"
+program pr64770
+  implicit none
+  ! Make sure pr64770test.dat exists
+  open(99, file="pr64770test.dat", status="replace")
+  close(99)
+  open(99, file="pr64770test.dat", access="stream", form="unformatted", &
+       status="new")
+end program pr64770
index 04f85c7c46cdbd275ee8e5d4abfaef9b644c57dd..e228a677105ce16770c35c06d4b9e4ac269370dd 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-24  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR libfortran/64770
+       * io/unit.c (filename_from_unit): Check that u->filename != NULL
+       before calling strdup.
+
 2015-01-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/61933
index e168d328665c6e6b1efb4a011baa131c1ef56ba0..687f5076a5ba93fa8ce6e31bd5ef8a61a1282bc3 100644 (file)
@@ -829,7 +829,7 @@ filename_from_unit (int n)
     }
 
   /* Get the filename.  */
-  if (u != NULL)
+  if (u != NULL && u->filename != NULL)
     return strdup (u->filename);
   else
     return (char *) NULL;