diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2014-05-16 23:37:13 +0300 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2014-05-16 23:37:13 +0300 |
commit | 870c7fa03a0d97a77092fab5ab397b25ef1f6d6b (patch) | |
tree | e2b9590673b3978f49350f9440fe3aa32bc1ddff | |
parent | 2236746bbb9b2f2e71db8200f363b7649748e981 (diff) | |
download | gcc-870c7fa03a0d97a77092fab5ab397b25ef1f6d6b.zip gcc-870c7fa03a0d97a77092fab5ab397b25ef1f6d6b.tar.gz gcc-870c7fa03a0d97a77092fab5ab397b25ef1f6d6b.tar.bz2 |
PR 61187 Fix use of uninitialized memory.
2014-05-16 Janne Blomqvist <jb@gcc.gnu.org>
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
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 14 |
2 files changed, 18 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index ed26a4d..f9287bd 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2014-05-16 Janne Blomqvist <jb@gcc.gnu.org> + + 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 <jb@gcc.gnu.org> PR libfortran/61035 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 34c2d0c..76ed84e 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; |