diff options
author | Barton E. Schaefer <schaefer@zsh.org> | 2016-09-29 11:16:24 -0700 |
---|---|---|
committer | Barton E. Schaefer <schaefer@zsh.org> | 2016-09-29 11:16:24 -0700 |
commit | e61ed2b80d60ca095006d7512f90c07e6c572ee0 (patch) | |
tree | f0a8e9d6b22efd84057d7ba9646b1173d9df366d /Src/utils.c | |
parent | 6ce696f35236dc4c1b6249c6f1e7f64cc95a6046 (diff) | |
download | zsh-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.c | 4 |
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; } |