Skip to content

[flang] [flang-rt] Subscript overrun occurs in namelists during a READ command. #184884

@kwyatt-ext

Description

@kwyatt-ext

The following test was designed to test proper error reporting when reading with an invalid namelist record. Using flang, this test hangs or produces a seg fault. This safely errors out using cray ftn and gfortran.

Test:

! Test a buffer overrun when an illegal vector-valued subscript is used in
! namelist input.
! The error should be reported through the READ's IOSTAT value.

PROGRAM bad_subscript_overrun01
  IMPLICIT NONE

  INTEGER,DIMENSION(5)                :: U, EXPECTU
  INTEGER,DIMENSION(5)                :: V, EXPECTV
  CHARACTER(LEN=20)                   :: NAMELIST_RECORD
  INTEGER                             :: IOS, ILOOP

  NAMELIST /SCORES/ U
  NAMELIST /CHTEST/ NAMELIST_RECORD

  U = 8
  EXPECTU = U
  V = 9
  EXPECTV = V
  IOS = 0

  NAMELIST_RECORD = " &SCORES U(V) = -1 /"
  OPEN(UNIT=10, ACCESS='SEQUENTIAL', ACTION='READWRITE')
  WRITE(10,'(A)') NAMELIST_RECORD
  REWIND 10

  ! This should fail because of the bad index.
  READ(10, NML = SCORES, IOSTAT=IOS)
  CLOSE(UNIT=10, STATUS='KEEP')

  ! Make sure the READ status was a failure.
  IF(IOS.NE.0) THEN
    PRINT *, "Test 1 - PASS"
  ELSE
    print *, "Test 1 - FAIL"
  ENDIF

  ! Make sure the values of the array haven't changed.
  DO ILOOP = 1,5
    IF(U(ILOOP).EQ.EXPECTU(ILOOP)) THEN
      PRINT *, "Test 2 - PASS"
    ELSE
      PRINT *, "Test 2 - FAIL"
    ENDIF
  ENDDO

END PROGRAM bad_subscript_overrun01

flang:

wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> ../../cpe-13666/build/bin/flang-new bad_subscript_overrun01.f90

wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> time ./a.out
^C

real    2m36.279s
user    2m36.185s
sys     0m0.005s

gfortran:

wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> gfortran bad_subscript_overrun01.f90
wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> ./a.out
 Test 1 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS

cray ftn:

wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> ftn bad_subscript_overrun01.f90
wyattke@pe34genoa:~/builds/flang_work/llvm-project/test> ./a.out
 Test 1 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS
 Test 2 - PASS

Metadata

Metadata

Assignees

Labels

flangFlang issues not falling into any other category

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions