[SV 57967] Only set APPEND mode for regular files

APPEND is a permanent mode shared by all users of a file.  If we
set it on a tty, pipe, etc. it will stay in effect even after make
exits, which can cause problems.

Patch provided by 0xef967c36@gmail.com

* src/output.c (set_append_mode): Check for a regular file.

Copyright-paperwork-exempt: yes
This commit is contained in:
Paul Smith 2020-03-30 14:38:47 -04:00
parent 8e024a2532
commit 80b90b7866

View file

@ -144,14 +144,18 @@ log_working_directory (int entering)
return 1; return 1;
} }
/* Set a file descriptor to be in O_APPEND mode. /* Set a file descriptor referring to a regular file
If it fails, just ignore it. */ to be in O_APPEND mode. If it fails, just ignore it. */
static void static void
set_append_mode (int fd) set_append_mode (int fd)
{ {
#if defined(F_GETFL) && defined(F_SETFL) && defined(O_APPEND) #if defined(F_GETFL) && defined(F_SETFL) && defined(O_APPEND)
int flags = fcntl (fd, F_GETFL, 0); struct stat stbuf;
int flags;
if (fstat (fd, &stbuf) != 0 || !S_ISREG (stbuf.st_mode))
return;
flags = fcntl (fd, F_GETFL, 0);
if (flags >= 0) if (flags >= 0)
{ {
int r; int r;