[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bison patches to avoid rare misuses of file descriptors
From: |
Paul Eggert |
Subject: |
Bison patches to avoid rare misuses of file descriptors |
Date: |
Sun, 22 May 2005 08:13:03 -0000 |
I installed this. It requires a re-bootstrap.
2005-05-22 Paul Eggert <address@hidden>
* bootstrap: Add stdio-safer, unistd-safer modules.
Remove m4/glibc2.m4 (introduced by latest gnulib, but
we don't need it).
* lib/.cvsignore: Add dup-safer.c, fd-safer.c,
fopen-safer.c, stdio-safer.h, unistd-safer.h.
* lib/subpipe.c: Include "unistd-safer.h".
(create_subpipe): Make sure all the newly-created
file descriptors are > 2, so that diagnostics don't
get sent down them (which might cause Bison to hang, in theory).
* m4/.cvsignore: Add stdio-safer.m4, unistd-safer.m4.
* src/files.c (xfopen): Use fopen_safer, not fopen.
Index: bootstrap
===================================================================
RCS file: /cvsroot/bison/bison/bootstrap,v
retrieving revision 1.17
diff -p -u -r1.17 bootstrap
--- bootstrap 14 May 2005 06:49:46 -0000 1.17
+++ bootstrap 22 May 2005 07:50:24 -0000
@@ -105,7 +105,9 @@ obstack
quote
quotearg
stdbool
+stdio-safer
stpcpy
+unistd-safer
xalloc
xalloc-die
xstrndup
@@ -197,6 +199,7 @@ intl_files_to_remove='
intl
m4/codeset.m4
m4/gettext.m4
+ m4/glibc2.m4
m4/glibc21.m4
m4/intdiv0.m4
m4/intmax.m4
Index: lib/.cvsignore
===================================================================
RCS file: /cvsroot/bison/bison/lib/.cvsignore,v
retrieving revision 1.12
diff -p -u -r1.12 .cvsignore
--- lib/.cvsignore 9 Dec 2004 07:54:47 -0000 1.12
+++ lib/.cvsignore 22 May 2005 07:50:24 -0000
@@ -9,11 +9,14 @@ argmatch.h
basename.c
dirname.c
dirname.h
+dup-safer.c
error.c
error.h
exit.h
exitfail.c
exitfail.h
+fd-safer.c
+fopen-safer.c
getopt.c
getopt.h
getopt1.c
@@ -37,6 +40,7 @@ quotearg.h
realloc.c
stdbool.h
stdbool_.h
+stdio-safer.h
stpcpy.c
stpcpy.h
strdup.c
@@ -46,6 +50,7 @@ strncasecmp.c
strndup.c
strndup.h
strnlen.c
+unistd-safer.h
unlocked-io.h
xalloc-die.c
xalloc.h
Index: lib/subpipe.c
===================================================================
RCS file: /cvsroot/bison/bison/lib/subpipe.c,v
retrieving revision 1.3
diff -p -u -r1.3 subpipe.c
--- lib/subpipe.c 14 May 2005 06:49:47 -0000 1.3
+++ lib/subpipe.c 22 May 2005 07:50:24 -0000
@@ -1,6 +1,6 @@
/* Subprocesses with pipes.
- Copyright (C) 2002, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -68,6 +68,7 @@
#endif
#include "error.h"
+#include "unistd-safer.h"
#include "gettext.h"
#define _(Msgid) gettext (Msgid)
@@ -105,15 +106,13 @@ create_subpipe (char const * const *argv
int to_out_fd;
pid_t pid;
- if (pipe (pipe_fd) != 0)
+ if (pipe (pipe_fd) != 0
+ || (to_in_fd = fd_safer (pipe_fd[0])) < 0
+ || (to_out_fd = fd_safer (pipe_fd[1])) < 0
+ || pipe (pipe_fd) != 0
+ || (from_in_fd = fd_safer (pipe_fd[0])) < 0
+ || (from_out_fd = fd_safer (pipe_fd[1])) < 0)
error (EXIT_FAILURE, errno, "pipe");
- to_in_fd = pipe_fd[0];
- to_out_fd = pipe_fd[1];
-
- if (pipe (pipe_fd) != 0)
- error (EXIT_FAILURE, errno, "pipe");
- from_in_fd = pipe_fd[0];
- from_out_fd = pipe_fd[1];
pid = vfork ();
if (pid < 0)
@@ -124,23 +123,16 @@ create_subpipe (char const * const *argv
/* Child. */
close (to_out_fd);
close (from_in_fd);
-
- if (to_in_fd != STDIN_FILENO)
- {
- dup2 (to_in_fd, STDIN_FILENO);
- close (to_in_fd);
- }
- if (from_out_fd != STDOUT_FILENO)
- {
- dup2 (from_out_fd, STDOUT_FILENO);
- close (from_out_fd);
- }
+ dup2 (to_in_fd, STDIN_FILENO);
+ close (to_in_fd);
+ dup2 (from_out_fd, STDOUT_FILENO);
+ close (from_out_fd);
/* The cast to (char **) rather than (char * const *) is needed
for portability to older hosts with a nonstandard prototype
for execvp. */
execvp (argv[0], (char **) argv);
-
+
_exit (errno == ENOENT ? 127 : 126);
}
Index: m4/.cvsignore
===================================================================
RCS file: /cvsroot/bison/bison/m4/.cvsignore,v
retrieving revision 1.11
diff -p -u -r1.11 .cvsignore
--- m4/.cvsignore 9 Dec 2004 07:55:04 -0000 1.11
+++ m4/.cvsignore 22 May 2005 07:50:24 -0000
@@ -26,11 +26,13 @@ progtest.m4
quote.m4
quotearg.m4
stdbool.m4
+stdio-safer.m4
stpcpy.m4
strdup.m4
strerror_r.m4
strndup.m4
strnlen.m4
+unistd-safer.m4
unlocked-io.m4
xalloc.m4
xstrndup.m4
Index: src/files.c
===================================================================
RCS file: /cvsroot/bison/bison/src/files.c,v
retrieving revision 1.87
diff -p -u -r1.87 files.c
--- src/files.c 14 May 2005 06:49:47 -0000 1.87
+++ src/files.c 22 May 2005 07:50:24 -0000
@@ -1,6 +1,6 @@
/* Open and close files for Bison.
- Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004
+ Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -95,7 +95,7 @@ xfopen (const char *name, const char *mo
{
FILE *ptr;
- ptr = fopen (name, mode);
+ ptr = fopen_safer (name, mode);
if (!ptr)
error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Bison patches to avoid rare misuses of file descriptors,
Paul Eggert <=