From e50443368c22ea4a2ec4e6585154b13cae31dc09 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Fri, 4 May 2007 15:14:07 +0000 Subject: re PR libfortran/31210 (I/O of string with (non-constant) zero length) PR libfortran/31210 * io/transfer.c (transfer_character): Avoid passing a NULL pointer as source to the transfer routines, if the string length is zero. From-SVN: r124428 --- libgfortran/io/transfer.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libgfortran/io') diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 13bb272..1e90e83 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -1401,8 +1401,17 @@ transfer_logical (st_parameter_dt *dtp, void *p, int kind) void transfer_character (st_parameter_dt *dtp, void *p, int len) { + static char *empty_string[0]; + if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK) return; + + /* Strings of zero length can have p == NULL, which confuses the + transfer routines into thinking we need more data elements. To avoid + this, we give them a nice pointer. */ + if (len == 0 && p == NULL) + p = empty_string; + /* Currently we support only 1 byte chars, and the library is a bit confused of character kind vs. length, so we kludge it by setting kind = length. */ -- cgit v1.1