aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-09-27 16:29:03 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-09-27 16:29:03 -0400
commita84b874a027fd8007efc10e0602396c4b5da170c (patch)
treef7604930a6a604446408bea64574cf23697a0506
parent9f535ba4e016f02c6d1bca45d6adfd04a036c9c1 (diff)
downloadstasis-a84b874a027fd8007efc10e0602396c4b5da170c.tar.gz
Fix leak
* When strdup fails and the temporary file handle is open, close the handle and die. * reported by @kmacdonald-stsci
-rw-r--r--src/multiprocessing.c2
-rw-r--r--src/utils.c11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/multiprocessing.c b/src/multiprocessing.c
index 1320a2a..74ba981 100644
--- a/src/multiprocessing.c
+++ b/src/multiprocessing.c
@@ -117,7 +117,7 @@ struct MultiProcessingTask *mp_pool_task(struct MultiProcessingPool *pool, const
// Create a temporary file to act as our intermediate command script
FILE *tp = NULL;
- char *t_name;
+ char *t_name = NULL;
t_name = xmkstemp(&tp, "w");
if (!t_name || !tp) {
return NULL;
diff --git a/src/utils.c b/src/utils.c
index 3a98f28..e037088 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -468,12 +468,23 @@ char *xmkstemp(FILE **fp, const char *mode) {
fd = mkstemp(t_name);
*fp = fdopen(fd, mode);
if (!*fp) {
+ // unable to open, die
if (fd > 0)
close(fd);
*fp = NULL;
return NULL;
}
+
char *path = strdup(t_name);
+ if (!path) {
+ // strdup failed, die
+ if (*fp) {
+ // close the file handle
+ fclose(*fp);
+ *fp = NULL;
+ }
+ // fall through. path is NULL.
+ }
return path;
}