| 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