From: Janne Blomqvist Date: Sun, 25 May 2014 19:29:00 +0000 (+0300) Subject: PR 61187 Avoid reading uninitialized memory. X-Git-Tag: releases/gcc-4.8.4~453 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5ad478df2e6e119fac0dc7357f30cb4ebdaebc4;p=thirdparty%2Fgcc.git PR 61187 Avoid reading uninitialized memory. 2014-05-25 Janne Blomqvist Backport from trunk. 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: r210914 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 1aaf6845cd79..6f70effe77be 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2014-05-25 Janne Blomqvist + + Backport from trunk. + 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-22 Release Manager * GCC 4.8.3 released. diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 8b9d7a773425..185d0dca157b 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -407,7 +407,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); @@ -983,7 +985,15 @@ fd_to_stream (int fd) /* 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;