From: Janne Blomqvist Date: Fri, 16 May 2014 20:37:13 +0000 (+0300) Subject: PR 61187 Fix use of uninitialized memory. X-Git-Tag: releases/gcc-5.1.0~7522 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=870c7fa03a0d97a77092fab5ab397b25ef1f6d6b;p=thirdparty%2Fgcc.git 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 --- 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;