]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR fortran/95104 - Segfault on a legal WAIT statement
authorHarald Anlauf <anlauf@gmx.de>
Thu, 28 May 2020 19:53:17 +0000 (21:53 +0200)
committerHarald Anlauf <anlauf@gmx.de>
Thu, 28 May 2020 20:13:56 +0000 (22:13 +0200)
The initial commit for this PR uncovered a latent issue with unit locking
in the Fortran run-time library.  Add check for valid unit.

2020-05-28  Harald Anlauf  <anlauf@gmx.de>

libgfortran/
PR libfortran/95104
* io/unit.c (unlock_unit): Guard by check for NULL pointer.

(cherry picked from commit 6ce3d791dfcba469e709935aba5743640f7d4959)

libgfortran/io/unit.c

index 87e01fe0442e42568dbb32c16516568522f4d404..377a8fe1b6acdf2607a8519744c10712df880846 100644 (file)
@@ -767,9 +767,12 @@ close_unit_1 (gfc_unit *u, int locked)
 void
 unlock_unit (gfc_unit *u)
 {
-  NOTE ("unlock_unit = %d", u->unit_number);
-  UNLOCK (&u->lock);
-  NOTE ("unlock_unit done");
+  if (u)
+    {
+      NOTE ("unlock_unit = %d", u->unit_number);
+      UNLOCK (&u->lock);
+      NOTE ("unlock_unit done");
+    }
 }
 
 /* close_unit()-- Close a unit.  The stream is closed, and any memory