2005-05-22 Paul Eggert <eggert@cs.ucla.edu>
+ * 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.
+
* data/lalr1.cc (yy::]b4_parser_class_name[::parse): Port
yesterday's yacc.c fix.
2005-05-21 Paul Eggert <eggert@cs.ucla.edu>
+ * data/glr.c, data/lalr1.cc: Update copyright date.
+
Fix a destructor bug reported by Wolfgang Spraul in
<http://lists.gnu.org/archive/html/bug-bison/2005-05/msg00042.html>.
* data/yacc.c (yyabortlab): Don't call destructor, and
quote
quotearg
stdbool
+stdio-safer
stpcpy
+unistd-safer
xalloc
xalloc-die
xstrndup
intl
m4/codeset.m4
m4/gettext.m4
+ m4/glibc2.m4
m4/glibc21.m4
m4/intdiv0.m4
m4/intmax.m4
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
realloc.c
stdbool.h
stdbool_.h
+stdio-safer.h
stpcpy.c
stpcpy.h
strdup.c
strndup.c
strndup.h
strnlen.c
+unistd-safer.h
unlocked-io.h
xalloc-die.c
xalloc.h
/* 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
#endif
#include "error.h"
+#include "unistd-safer.h"
#include "gettext.h"
#define _(Msgid) gettext (Msgid)
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)
/* 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);
}
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
/* 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.
{
FILE *ptr;
- ptr = fopen (name, mode);
+ ptr = fopen_safer (name, mode);
if (!ptr)
error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name);