This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[gfortran] patch for PR 16080 - segfault on reading empty string
- From: Bud Davis <bdavis at gcc dot gnu dot org>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, gfortran <fortran at gcc dot gnu dot org>
- Date: Sat, 19 Jun 2004 11:28:38 -0500
- Subject: [gfortran] patch for PR 16080 - segfault on reading empty string
tested with no additional regressions i686/gnu/linux FC1.
new test:
! pr 16080, segfault on reading an empty string
implicit none
integer t
character*20 temp_name
character*2 quotes
open(unit=7,status='SCRATCH')
quotes = '""""' ! "" in the file
write(7,*)1
write(7,'(A)')quotes
temp_name = 'hello' ! make sure the read overwrites it
rewind(7)
read(7, *) t
read(7, *) temp_name
if (temp_name.ne.'') call abort
end
2004-06-19 Bud Davis <bdavis9659@comcast.net>
PR 16080
* io/list_read.c(set_value): don't copy if the string is null.
--bud
Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/list_read.c,v
retrieving revision 1.2
diff -c -3 -p -r1.2 list_read.c
*** gcc/libgfortran/io/list_read.c 13 May 2004 06:41:02 -0000 1.2
--- gcc/libgfortran/io/list_read.c 19 Jun 2004 16:21:34 -0000
*************** set_value:
*** 1313,1320 ****
break;
case BT_CHARACTER:
! m = (len < saved_used) ? len : saved_used;
! memcpy (p, saved_string, m);
if (m < len)
memset (((char *) p) + m, ' ', len - m);
--- 1313,1325 ----
break;
case BT_CHARACTER:
! if (saved_string)
! {
! m = (len < saved_used) ? len : saved_used;
! memcpy (p, saved_string, m);
! }
! else /* just delimeters encountered, nothing to copy but SPACE */
! m = 0;
if (m < len)
memset (((char *) p) + m, ' ', len - m);