summaryrefslogtreecommitdiff
path: root/Src/utils.c
diff options
context:
space:
mode:
authorMartijn Dekker <martijn@inlv.org>2018-03-26 22:32:50 +0200
committerPeter Stephenson <p.stephenson@samsung.com>2018-03-27 09:32:55 +0100
commitfa0105f78c9204d72cb0cd68c20d5f390b2a044b (patch)
treebe4d7a30783b01099593e6a645846465394252e0 /Src/utils.c
parent9bc391105ffc9a430668373388badd369e314415 (diff)
downloadzsh-fa0105f78c9204d72cb0cd68c20d5f390b2a044b.tar.gz
zsh-fa0105f78c9204d72cb0cd68c20d5f390b2a044b.zip
42538: Temporarily set umask for here document.
Done while signals are queued.
Diffstat (limited to 'Src/utils.c')
-rw-r--r--Src/utils.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/Src/utils.c b/Src/utils.c
index 6517e15b8..466014263 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -2177,10 +2177,12 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
{
char *fn;
int fd;
+ mode_t old_umask;
#if HAVE_MKSTEMP
char *suffix = prefix ? ".XXXXXX" : "XXXXXX";
queue_signals();
+ old_umask = umask(0177);
if (!prefix && !(prefix = getsparam("TMPPREFIX")))
prefix = DEFAULT_TMPPREFIX;
if (use_heap)
@@ -2198,6 +2200,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
int failures = 0;
queue_signals();
+ old_umask = umask(0177);
do {
if (!(fn = gettempname(prefix, use_heap))) {
fd = -1;
@@ -2212,6 +2215,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
#endif
*tempname = fn;
+ umask(old_umask);
unqueue_signals();
return fd;
}