diff options
author | Harald Anlauf <anlauf@gmx.de> | 2020-05-26 23:29:52 +0200 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2020-05-26 23:29:52 +0200 |
commit | 56f03cd12be26828788a27f6f3c250041a958e45 (patch) | |
tree | 5f19b44371d196d19da53912ad5c3c79832cbdcc /libgfortran/io | |
parent | 3bf5e7657b752cc2352778e8c20ac9cdddca4f93 (diff) | |
download | gcc-56f03cd12be26828788a27f6f3c250041a958e45.tar.gz |
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>
Diffstat (limited to 'libgfortran/io')
-rw-r--r-- | libgfortran/io/transfer.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index d071c1ce915..cd51679ff46 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -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); |