From 870c7fa03a0d97a77092fab5ab397b25ef1f6d6b Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Fri, 16 May 2014 23:37:13 +0300 Subject: [PATCH] PR 61187 Fix use of uninitialized memory. 2014-05-16 Janne Blomqvist PR libfortran/61187 * io/unix.c (raw_close): Check if s->fd is -1. (fd_to_stream): Check return value of fstat(), handle error. From-SVN: r210527 --- libgfortran/ChangeLog | 6 ++++++ libgfortran/io/unix.c | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index ed26a4d70772..f9287bd0e85a 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2014-05-16 Janne Blomqvist + + PR libfortran/61187 + * io/unix.c (raw_close): Check if s->fd is -1. + (fd_to_stream): Check return value of fstat(), handle error. + 2014-05-12 Janne Blomqvist PR libfortran/61035 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 34c2d0cad163..76ed84effbf6 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -412,7 +412,9 @@ raw_close (unix_stream * s) { int retval; - if (s->fd != STDOUT_FILENO + if (s->fd == -1) + retval = -1; + else if (s->fd != STDOUT_FILENO && s->fd != STDERR_FILENO && s->fd != STDIN_FILENO) retval = close (s->fd); @@ -1003,7 +1005,15 @@ fd_to_stream (int fd, bool unformatted) /* Get the current length of the file. */ - fstat (fd, &statbuf); + if (fstat (fd, &statbuf) == -1) + { + s->st_dev = s->st_ino = -1; + s->file_length = 0; + if (errno == EBADF) + s->fd = -1; + raw_init (s); + return (stream *) s; + } s->st_dev = statbuf.st_dev; s->st_ino = statbuf.st_ino; -- 2.47.3