Commit b39f5e6c authored by Paul Eggert's avatar Paul Eggert

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.
parent 851535f5
Pipeline #2278 failed with stage
in 90 minutes
......@@ -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 *
......
......@@ -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"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment