Fortran: Namelist read with invalid input accepted.

PR fortran/109662

libgfortran/ChangeLog:

	* io/list_read.c: Add a check for a comma after a namelist
	name in read input. Issue a runtime error message.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr109662.f90: New test.
This commit is contained in:
Jerry DeLisle 2023-05-05 20:12:25 -07:00
parent b7fe38c14e
commit 96d6991962
2 changed files with 20 additions and 1 deletions

View file

@ -0,0 +1,15 @@
! { dg-do run }
! { dg-options "-std=f2003" }
! PR109662 a comma after namelist name accepted on input.
program testnmlread
implicit none
character(16) :: list = '&stuff, n = 759/'
character(100)::message
integer :: n, ioresult
namelist/stuff/n
message = ""
ioresult = 0
n = 99
read(list,nml=stuff,iostat=ioresult)
if (ioresult == 0) STOP 13
end program testnmlread

View file

@ -3596,8 +3596,12 @@ find_nml_name:
if (dtp->u.p.nml_read_error)
goto find_nml_name;
/* A trailing space is required, we give a little latitude here, 10.9.1. */
/* A trailing space is required, we allow a comma with std=gnu. */
c = next_char (dtp);
if (c == ',' && !(compile_options.allow_std & GFC_STD_GNU))
generate_error (&dtp->common, LIBERROR_READ_VALUE,
"Comma after namelist name not allowed");
if (!is_separator(c) && c != '!')
{
unget_char (dtp, c);