]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Add an assortment of missing frees and closes.
authorSimon Tatham <anakin@pobox.com>
Tue, 14 Feb 2017 20:42:26 +0000 (20:42 +0000)
committerSimon Tatham <anakin@pobox.com>
Tue, 14 Feb 2017 22:14:25 +0000 (22:14 +0000)
Coverity's resource-leak checker is on the ball as usual.

cmdgen.c
pageant.c
pscp.c
ssh.c
sshpubk.c
unix/gtkdlg.c
unix/gtkfont.c
unix/uxpgnt.c
windows/winhelp.c
windows/winproxy.c
windows/winser.c

index f9332b5af0e7dcee1a2b2cbc222261199816bbd3..f1cf977086512d82a516b9868756475feb0bd1ef 100644 (file)
--- a/cmdgen.c
+++ b/cmdgen.c
@@ -1162,6 +1162,8 @@ void test(int retval, ...)
     } else {
        passes++;
     }
+
+    sfree(argv);
 }
 
 void filecmp(char *file1, char *file2, char *fmt, ...)
index 31a5540c45f9d36275d532de5fad93d6e6f36b50..e7430e7865faac93a173f15ede19442d76ea54cf 100644 (file)
--- a/pageant.c
+++ b/pageant.c
@@ -406,6 +406,7 @@ void *pageant_handle_msg(const void *msg, int msglen, int *outlen,
            if (i < 0) {
                 freebn(reqkey.exponent);
                 freebn(reqkey.modulus);
+               freebn(challenge);
                 fail_reason = "request truncated before challenge";
                goto failure;
             }
@@ -1334,6 +1335,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                    int n = rsa_public_blob_len(p, keylistlen);
                    if (n < 0) {
                         *retstr = dupstr("Received broken key list from agent");
+                        sfree(keylist);
+                        sfree(blob);
                         return PAGEANT_ACTION_FAILURE;
                    }
                    p += n;
@@ -1342,6 +1345,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                    int n;
                    if (keylistlen < 4) {
                         *retstr = dupstr("Received broken key list from agent");
+                        sfree(keylist);
+                        sfree(blob);
                         return PAGEANT_ACTION_FAILURE;
                    }
                    n = GET_32BIT(p);
@@ -1350,6 +1355,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
 
                    if (n < 0 || n > keylistlen) {
                         *retstr = dupstr("Received broken key list from agent");
+                        sfree(keylist);
+                        sfree(blob);
                         return PAGEANT_ACTION_FAILURE;
                    }
                    p += n;
@@ -1360,6 +1367,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                    int n;
                    if (keylistlen < 4) {
                         *retstr = dupstr("Received broken key list from agent");
+                        sfree(keylist);
+                        sfree(blob);
                         return PAGEANT_ACTION_FAILURE;
                    }
                    n = GET_32BIT(p);
@@ -1368,6 +1377,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
 
                    if (n < 0 || n > keylistlen) {
                         *retstr = dupstr("Received broken key list from agent");
+                        sfree(keylist);
+                        sfree(blob);
                         return PAGEANT_ACTION_FAILURE;
                    }
                    p += n;
@@ -1414,6 +1425,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                  * Run out of passphrases to try.
                  */
                 *retstr = comment;
+                sfree(rkey);
                 return PAGEANT_ACTION_NEED_PP;
             }
        } else
@@ -1437,6 +1449,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
              * a bad passphrase.
              */
             *retstr = dupstr(error);
+            sfree(rkey);
             return PAGEANT_ACTION_FAILURE;
         } else if (ret == 1) {
             /*
@@ -1514,12 +1527,19 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
            if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) {
                *retstr = dupstr("The already running Pageant "
                                  "refused to add the key.");
+                freersakey(rkey);
+                sfree(rkey);
+                sfree(request);
+                sfree(response);
                 return PAGEANT_ACTION_FAILURE;
             }
+            freersakey(rkey);
+            sfree(rkey);
            sfree(request);
            sfree(response);
        } else {
            if (!pageant_add_ssh1_key(rkey)) {
+                freersakey(rkey);
                sfree(rkey);           /* already present, don't waste RAM */
             }
        }
@@ -1560,6 +1580,8 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
            if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) {
                *retstr = dupstr("The already running Pageant "
                                  "refused to add the key.");
+                sfree(request);
+                sfree(response);
                 return PAGEANT_ACTION_FAILURE;
             }
 
diff --git a/pscp.c b/pscp.c
index dd3beb0c03f97e74ddbb6edb2a583baff139f770..01c9ffa2fa57dae18fb651c3dea7f70c995c4add 100644 (file)
--- a/pscp.c
+++ b/pscp.c
@@ -383,6 +383,7 @@ static void do_cmd(char *host, char *user, char *cmd)
            /* Use `host' as a bare hostname. */
            conf_set_str(conf, CONF_host, host);
        }
+        conf_free(conf2);
     } else {
        /* Patch in hostname `host' to session details. */
        conf_set_str(conf, CONF_host, host);
diff --git a/ssh.c b/ssh.c
index 931d8686b6f18c9f8090397fc856f53e7a0a54b7..46b6013b905f9b85aa847d8e8d73a4504b7d5358 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -3954,6 +3954,7 @@ static void ssh_agentf_try_forward(struct ssh_channel *c)
          * straight on and go round this loop again.
          */
         ssh_agentf_got_response(c, reply, replylen);
+        sfree(reply);
     }
 
     /*
index 5dacc97d70a329e1ee9235e847ee04cf8d3769a9..1a27c313974506ec4fd9e6051b47e3f414a87c97 100644 (file)
--- a/sshpubk.c
+++ b/sshpubk.c
@@ -946,6 +946,7 @@ unsigned char *rfc4716_loadpub(FILE *fp, char **algorithm,
             }
 
             *q = '\0';
+            sfree(comment);   /* *just* in case of multiple Comment headers */
             comment = dupstr(line);
         } else if (!strcmp(line, "Subject") ||
                    !strncmp(line, "x-", 2)) {
index 4eb4b010a4341781b3f4a5fd59bed27e39a3614d..f16119488e035018cb349432207b3b0e05373d0c 100644 (file)
@@ -3304,6 +3304,7 @@ int do_config_box(const char *title, Conf *conf, int midsession,
 
     dlg_cleanup(&dp);
     sfree(selparams);
+    ctrl_free_box(ctrlbox);
 
     return dp.retval;
 }
index 9b655e4436345331206ba58010c15d12d491785f..d9980880fcab421a47bda70911df15516612ee23 100644 (file)
@@ -1126,6 +1126,7 @@ static void x11font_enum_fonts(GtkWidget *widget,
        }
     }
     XFreeFontNames(fontnames);
+    sfree(tmp);
 }
 
 static char *x11font_canonify_fontname(GtkWidget *widget, const char *name,
index b8738fac55dfd88574b186d6cd01806ba08e3922..d0d69600a58014918d8d6a861ad13c2c4801286c 100644 (file)
@@ -978,6 +978,8 @@ void run_agent(void)
         fprintf(stderr, "pageant: %s: %s\n", socketname, strerror(errno));
         exit(1);
     }
+
+    conf_free(conf);
 }
 
 int main(int argc, char **argv)
index 64f6ad4597ac1dad4609e57e878a3ff5684bb27d..47539e539f9670cac3f0189ba2747b9ff8c0a196 100644 (file)
@@ -58,6 +58,7 @@ void init_help(void)
        HINSTANCE dllHH = load_system32_dll("hhctrl.ocx");
        GET_WINDOWS_FUNCTION(dllHH, HtmlHelpA);
        if (!p_HtmlHelpA) {
+            sfree(chm_path);
            chm_path = NULL;
            if (dllHH)
                FreeLibrary(dllHH);
index 813c4fe9a76bc21ac0a1d0667a4bd47faf5f2e80..ad73d9af5f9ce1d120845ab93d3aefb864329ab1 100644 (file)
@@ -77,6 +77,10 @@ Socket platform_new_connection(SockAddr addr, const char *hostname,
             Socket ret = new_error_socket
                 ("Unable to create pipes for proxy command", plug);
             sfree(cmd);
+            CloseHandle(us_from_cmd);
+            CloseHandle(cmd_to_us);
+            CloseHandle(us_to_cmd);
+            CloseHandle(cmd_from_us);
             return ret;
         }
     }
index d4ada2d064a8600a73e70fcdb2a10b5fc09d177e..646cd2546a22597db0083f28d9295552343a11ea 100644 (file)
@@ -220,6 +220,7 @@ static const char *serial_init(void *frontend_handle, void **backend_handle,
     {
        char *msg = dupprintf("Opening serial device %s", serline);
        logevent(serial->frontend, msg);
+        sfree(msg);
     }
 
     {