about summary refs log tree commit diff
path: root/Src/utils.c
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2016-09-29 11:16:24 -0700
committerBarton E. Schaefer <schaefer@zsh.org>2016-09-29 11:16:24 -0700
commite61ed2b80d60ca095006d7512f90c07e6c572ee0 (patch)
treef0a8e9d6b22efd84057d7ba9646b1173d9df366d /Src/utils.c
parent6ce696f35236dc4c1b6249c6f1e7f64cc95a6046 (diff)
downloadzsh-e61ed2b80d60ca095006d7512f90c07e6c572ee0.tar.gz
zsh-e61ed2b80d60ca095006d7512f90c07e6c572ee0.tar.xz
zsh-e61ed2b80d60ca095006d7512f90c07e6c572ee0.zip
39470: failure to open a supposedly unique temp file name should result in an error
Also band-aid for signal-related race conditions in temp file name generation
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 b434821e5..db4352908 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -2164,6 +2164,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
 #if HAVE_MKSTEMP
     char *suffix = prefix ? ".XXXXXX" : "XXXXXX";
 
+    queue_signals();
     if (!prefix && !(prefix = getsparam("TMPPREFIX")))
 	prefix = DEFAULT_TMPPREFIX;
     if (use_heap)
@@ -2180,6 +2181,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
 #else
     int failures = 0;
 
+    queue_signals();
     do {
 	if (!(fn = gettempname(prefix, use_heap))) {
 	    fd = -1;
@@ -2193,6 +2195,8 @@ gettempfile(const char *prefix, int use_heap, char **tempname)
     } while (errno == EEXIST && ++failures < 16);
 #endif
     *tempname = fn;
+
+    unqueue_signals();
     return fd;
 }