PR fortran/95104 - Segfault on a legal WAIT statement

Referencing a unit in a WAIT statement that has not been opened before
resulted in a NULL pointer dereference.  Check for this condition.

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

libgfortran/
	PR libfortran/95104
	* io/transfer.c (st_wait_async): Do not dereference NULL pointer.

gcc/testsuite/
	PR libfortran/95104
	* gfortran.dg/pr95104.f90: New test.

Co-Authored-By: Steven G. Kargl  <kargl@gcc.gnu.org>
This commit is contained in:
Harald Anlauf 2020-05-26 23:29:52 +02:00
parent 3bf5e7657b
commit 56f03cd12b
2 changed files with 9 additions and 1 deletions

View File

@ -0,0 +1,8 @@
! { dg-do run }
! PR libfortran/95104 - Segfault on a legal WAIT statement
program test
wait (10, iostat=ios)
if (ios /= 0) stop 1
close (10)
end program test

View File

@ -4500,7 +4500,7 @@ void
st_wait_async (st_parameter_wait *wtp)
{
gfc_unit *u = find_unit (wtp->common.unit);
if (ASYNC_IO && u->au)
if (ASYNC_IO && u && u->au)
{
if (wtp->common.flags & IOPARM_WAIT_HAS_ID)
async_wait_id (&(wtp->common), u->au, *wtp->id);