From 34e083e3608c39f4c0cc71354eda8553230b3acc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 10 Apr 2014 22:47:32 -0700 Subject: [PATCH] * src/keyboard.c (Fopen_dribble_file): Make file private. Fixes: debbugs:17187 --- src/ChangeLog | 4 ++++ src/keyboard.c | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index e2c925f03d3..9d59ab1c97c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2014-04-11 Glenn Morris + + * keyboard.c (Fopen_dribble_file): Make file private. (Bug#17187) + 2014-04-09 Ken Brown * Makefile.in (EMACS_MANIFEST): Revert last change. diff --git a/src/keyboard.c b/src/keyboard.c index 3b50140684e..f74ba0ee581 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -20,6 +20,7 @@ along with GNU Emacs. If not, see . */ #include #include "sysstdio.h" +#include #include "lisp.h" #include "termchar.h" @@ -10085,8 +10086,18 @@ This may include sensitive information such as passwords. */) } if (!NILP (file)) { + int fd; file = Fexpand_file_name (file, Qnil); - dribble = emacs_fopen (SSDATA (file), "w"); + /* This isn't robust, since eg file could be created after we + check whether it exists but before emacs_open. + Feel free to improve it, but this is not critical. (Bug#17187) */ + if (! NILP (Ffile_exists_p (file))) + { + if (chmod (SSDATA (file), 0600) < 0) + report_file_error ("Doing chmod", file); + } + fd = emacs_open (SSDATA (file), O_WRONLY | O_CREAT | O_TRUNC, 0600); + dribble = fd < 0 ? 0 : fdopen (fd, "w"); if (dribble == 0) report_file_error ("Opening dribble", file); } -- 2.39.2