From: Janne Blomqvist Date: Fri, 16 May 2014 20:42:56 +0000 (+0300) Subject: PR 61187 Fix use of uninitialized data. X-Git-Tag: releases/gcc-4.7.4~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=756c9a1056e16de3aa2b334dc39363e70472fdda;p=thirdparty%2Fgcc.git PR 61187 Fix use of uninitialized data. 2014-05-16 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: r210529 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 514ff6216d45..75805d2bbcf4 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2014-05-16 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-04 Janne Blomqvist Backport from 4.9 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 8421451e78c2..31c4f69befc7 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -392,7 +392,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); @@ -961,7 +963,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;