summary refs log tree commit diff
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
parent9bc391105ffc9a430668373388badd369e314415 (diff)
downloadzsh-fa0105f78c9204d72cb0cd68c20d5f390b2a044b.tar.gz
zsh-fa0105f78c9204d72cb0cd68c20d5f390b2a044b.tar.xz
zsh-fa0105f78c9204d72cb0cd68c20d5f390b2a044b.zip
42538: Temporarily set umask for here document.
Done while signals are queued.
-rw-r--r--ChangeLog6
-rw-r--r--Src/utils.c4
-rw-r--r--Test/A04redirect.ztst9
3 files changed, 19 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4ac19f9d9..e36a0d49f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-27  Peter Stephenson  <p.stephenson@samsung.com>
+
+	* Martijn: 42538: Src/utils.c, Test/A04redirect.ztst:
+	temporarily set umask (with signals queued) while reading
+	here document.
+
 2018-03-25  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 42480: Src/utils.c: optimize $#var for single-byte character sets
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;
 }
diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst
index ef7ddb25a..b5b65cf5d 100644
--- a/Test/A04redirect.ztst
+++ b/Test/A04redirect.ztst
@@ -667,3 +667,12 @@
 0:Redirect in the middle of assignments
 >b
 >d
+
+  umask 0777
+  cat <<'  HERE'
+  look ma, no permissions
+  HERE
+  cat <<<"it's a miracle"
+0:Here-{string,document}s succeed with restrictive umask
+>  look ma, no permissions
+>it's a miracle