Fix error checking in uxstore.c: add a missing check, and fix a
[u/mdw/putty] / unix / uxstore.c
index f2efc71..d97185e 100644 (file)
@@ -651,7 +651,12 @@ void store_host_key(const char *hostname, int port,
 
     fclose(wfp);
 
-    rename(tmpfilename, filename);
+    if (rename(tmpfilename, filename) < 0) {
+        char *msg = dupprintf("Unable to store host key: rename(\"%s\",\"%s\")"
+                              " returned '%s'", tmpfilename, filename,
+                              strerror(errno));
+        nonfatal(msg);
+    }
 
     sfree(tmpfilename);
     sfree(filename);
@@ -693,6 +698,7 @@ void write_random_seed(void *data, int len)
                                   "returned '%s'", fname, strerror(errno));
             nonfatal(msg);
             sfree(msg);
+            sfree(fname);
             return;
         }
        char *dir;
@@ -703,17 +709,19 @@ void write_random_seed(void *data, int len)
                                   "returned '%s'", dir, strerror(errno));
             nonfatal(msg);
             sfree(msg);
+            sfree(fname);
             sfree(dir);
             return;
         }
        sfree(dir);
 
        fd = open(fname, O_CREAT | O_WRONLY, 0600);
-        if (errno != ENOENT) {
+        if (fd < 0) {
             char *msg = dupprintf("Unable to write random seed: open(\"%s\") "
                                   "returned '%s'", fname, strerror(errno));
             nonfatal(msg);
             sfree(msg);
+            sfree(fname);
             return;
         }
     }