Don’t ignore stderr failure when ADDRESS_SANITIZER
* src/emacs.c (close_output_streams): Move from here ... * src/sysdep.c: ... to here, where it really belongs anyway. When ADDRESS_SANITIZER, fflush stderr and check for ferror, to catch stderr output errors even in this case.
This commit is contained in:
parent
851535f587
commit
b39f5e6c9c
3 changed files with 21 additions and 20 deletions
20
src/emacs.c
20
src/emacs.c
|
@ -29,8 +29,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <close-stream.h>
|
||||
|
||||
#define MAIN_PROGRAM
|
||||
#include "lisp.h"
|
||||
#include "sysstdio.h"
|
||||
|
@ -661,24 +659,6 @@ argmatch (char **argv, int argc, const char *sstr, const char *lstr,
|
|||
}
|
||||
}
|
||||
|
||||
/* Close standard output and standard error, reporting any write
|
||||
errors as best we can. This is intended for use with atexit. */
|
||||
static void
|
||||
close_output_streams (void)
|
||||
{
|
||||
if (close_stream (stdout) != 0)
|
||||
{
|
||||
emacs_perror ("Write error to standard output");
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Do not close stderr if addresses are being sanitized, as the
|
||||
sanitizer might report to stderr after this function is
|
||||
invoked. */
|
||||
if (!ADDRESS_SANITIZER && close_stream (stderr) != 0)
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
#ifdef HAVE_PDUMPER
|
||||
|
||||
static const char *
|
||||
|
|
20
src/sysdep.c
20
src/sysdep.c
|
@ -30,6 +30,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
#include <unistd.h>
|
||||
|
||||
#include <c-ctype.h>
|
||||
#include <close-stream.h>
|
||||
#include <pathmax.h>
|
||||
#include <utimens.h>
|
||||
|
||||
|
@ -2768,6 +2769,25 @@ safe_strsignal (int code)
|
|||
return signame;
|
||||
}
|
||||
|
||||
/* Close standard output and standard error, reporting any write
|
||||
errors as best we can. This is intended for use with atexit. */
|
||||
void
|
||||
close_output_streams (void)
|
||||
{
|
||||
if (close_stream (stdout) != 0)
|
||||
{
|
||||
emacs_perror ("Write error to standard output");
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Do not close stderr if addresses are being sanitized, as the
|
||||
sanitizer might report to stderr after this function is invoked. */
|
||||
if (ADDRESS_SANITIZER
|
||||
? fflush_unlocked (stderr) != 0 || ferror (stderr)
|
||||
: close_stream (stderr) != 0)
|
||||
_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
#ifndef DOS_NT
|
||||
/* For make-serial-process */
|
||||
int
|
||||
|
|
|
@ -24,6 +24,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
#include <stdio.h>
|
||||
|
||||
extern FILE *emacs_fopen (char const *, char const *);
|
||||
extern void close_output_streams (void);
|
||||
|
||||
#if O_BINARY
|
||||
# define FOPEN_BINARY "b"
|
||||
|
|
Loading…
Add table
Reference in a new issue