Issue 184884
Summary [flang] [flang-rt] Subscript overrun could occur in namelists during a READ command.
Labels flang
Assignees
Reporter 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=""
  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
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to