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 19:53:17 +0000 (21:53 +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.

libgfortran/io/unit.c

index 0030d7e8701856630ad89194f6b02a749d3179fe..a3b0656cb9091953f7be8dd6e0f6563827200e61 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