* 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.
This commit is contained in:
Paul Eggert
2005-05-22 08:04:06 +00:00
parent 51c30d2144
commit 3ea5f0ec81
6 changed files with 39 additions and 23 deletions

View File

@@ -1,10 +1,24 @@
2005-05-22 Paul Eggert <eggert@cs.ucla.edu> 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 * data/lalr1.cc (yy::]b4_parser_class_name[::parse): Port
yesterday's yacc.c fix. yesterday's yacc.c fix.
2005-05-21 Paul Eggert <eggert@cs.ucla.edu> 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 Fix a destructor bug reported by Wolfgang Spraul in
<http://lists.gnu.org/archive/html/bug-bison/2005-05/msg00042.html>. <http://lists.gnu.org/archive/html/bug-bison/2005-05/msg00042.html>.
* data/yacc.c (yyabortlab): Don't call destructor, and * data/yacc.c (yyabortlab): Don't call destructor, and

View File

@@ -105,7 +105,9 @@ obstack
quote quote
quotearg quotearg
stdbool stdbool
stdio-safer
stpcpy stpcpy
unistd-safer
xalloc xalloc
xalloc-die xalloc-die
xstrndup xstrndup
@@ -197,6 +199,7 @@ intl_files_to_remove='
intl intl
m4/codeset.m4 m4/codeset.m4
m4/gettext.m4 m4/gettext.m4
m4/glibc2.m4
m4/glibc21.m4 m4/glibc21.m4
m4/intdiv0.m4 m4/intdiv0.m4
m4/intmax.m4 m4/intmax.m4

View File

@@ -9,11 +9,14 @@ argmatch.h
basename.c basename.c
dirname.c dirname.c
dirname.h dirname.h
dup-safer.c
error.c error.c
error.h error.h
exit.h exit.h
exitfail.c exitfail.c
exitfail.h exitfail.h
fd-safer.c
fopen-safer.c
getopt.c getopt.c
getopt.h getopt.h
getopt1.c getopt1.c
@@ -37,6 +40,7 @@ quotearg.h
realloc.c realloc.c
stdbool.h stdbool.h
stdbool_.h stdbool_.h
stdio-safer.h
stpcpy.c stpcpy.c
stpcpy.h stpcpy.h
strdup.c strdup.c
@@ -46,6 +50,7 @@ strncasecmp.c
strndup.c strndup.c
strndup.h strndup.h
strnlen.c strnlen.c
unistd-safer.h
unlocked-io.h unlocked-io.h
xalloc-die.c xalloc-die.c
xalloc.h xalloc.h

View File

@@ -1,6 +1,6 @@
/* Subprocesses with pipes. /* 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 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 it under the terms of the GNU General Public License as published by
@@ -68,6 +68,7 @@
#endif #endif
#include "error.h" #include "error.h"
#include "unistd-safer.h"
#include "gettext.h" #include "gettext.h"
#define _(Msgid) gettext (Msgid) #define _(Msgid) gettext (Msgid)
@@ -105,15 +106,13 @@ create_subpipe (char const * const *argv, int fd[2])
int to_out_fd; int to_out_fd;
pid_t pid; 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"); 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 (); pid = vfork ();
if (pid < 0) if (pid < 0)
@@ -124,17 +123,10 @@ create_subpipe (char const * const *argv, int fd[2])
/* Child. */ /* Child. */
close (to_out_fd); close (to_out_fd);
close (from_in_fd); close (from_in_fd);
dup2 (to_in_fd, STDIN_FILENO);
if (to_in_fd != STDIN_FILENO) close (to_in_fd);
{ dup2 (from_out_fd, STDOUT_FILENO);
dup2 (to_in_fd, STDIN_FILENO); close (from_out_fd);
close (to_in_fd);
}
if (from_out_fd != STDOUT_FILENO)
{
dup2 (from_out_fd, STDOUT_FILENO);
close (from_out_fd);
}
/* The cast to (char **) rather than (char * const *) is needed /* The cast to (char **) rather than (char * const *) is needed
for portability to older hosts with a nonstandard prototype for portability to older hosts with a nonstandard prototype

View File

@@ -26,11 +26,13 @@ progtest.m4
quote.m4 quote.m4
quotearg.m4 quotearg.m4
stdbool.m4 stdbool.m4
stdio-safer.m4
stpcpy.m4 stpcpy.m4
strdup.m4 strdup.m4
strerror_r.m4 strerror_r.m4
strndup.m4 strndup.m4
strnlen.m4 strnlen.m4
unistd-safer.m4
unlocked-io.m4 unlocked-io.m4
xalloc.m4 xalloc.m4
xstrndup.m4 xstrndup.m4

View File

@@ -1,6 +1,6 @@
/* Open and close files for Bison. /* 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. Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -95,7 +95,7 @@ xfopen (const char *name, const char *mode)
{ {
FILE *ptr; FILE *ptr;
ptr = fopen (name, mode); ptr = fopen_safer (name, mode);
if (!ptr) if (!ptr)
error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name); error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name);