From 80b90b7866a83a7ddec7b960cd2f9917ab2a2fc6 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Mon, 30 Mar 2020 14:38:47 -0400 Subject: [PATCH] [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 --- src/output.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/output.c b/src/output.c index 4845f202..e222e0a5 100644 --- a/src/output.c +++ b/src/output.c @@ -144,14 +144,18 @@ log_working_directory (int entering) return 1; } -/* Set a file descriptor to be in O_APPEND mode. - If it fails, just ignore it. */ +/* Set a file descriptor referring to a regular file + to be in O_APPEND mode. If it fails, just ignore it. */ static void set_append_mode (int fd) { #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) { int r;