From b72bdf1132e50a6bb5d1d11d4ed239a34866e5e1 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 17 Jan 2010 16:20:45 +0000 Subject: [PATCH] Plug a few minor memory leaks, based on a patch by Sirp Potijk. While I'm here, add an assertion in sshrand.c to catch mistakes in reference counting. git-svn-id: svn://svn.tartarus.org/sgt/putty@8846 cda61777-01e9-0310-a592-d414129be87e --- cmdline.c | 18 +++++++++++++++--- ssh.c | 2 ++ sshrand.c | 5 +++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cmdline.c b/cmdline.c index 26f29c99..73c6f734 100644 --- a/cmdline.c +++ b/cmdline.c @@ -56,20 +56,30 @@ static void cmdline_save_param(char *p, char *value, int pri) saves[pri].nsaved++; } +static char *cmdline_password = NULL; + void cmdline_cleanup(void) { int pri; - for (pri = 0; pri < NPRIORITIES; pri++) + if (cmdline_password) { + memset(cmdline_password, 0, strlen(cmdline_password)); + sfree(cmdline_password); + cmdline_password = NULL; + } + + for (pri = 0; pri < NPRIORITIES; pri++) { sfree(saves[pri].params); + saves[pri].params = NULL; + saves[pri].savesize = 0; + saves[pri].nsaved = 0; + } } #define SAVEABLE(pri) do { \ if (need_save) { cmdline_save_param(p, value, pri); return ret; } \ } while (0) -static char *cmdline_password = NULL; - /* * Similar interface to get_userpass_input(), except that here a -1 * return means that we aren't capable of processing the prompt and @@ -99,6 +109,8 @@ int cmdline_get_passwd_input(prompts_t *p, unsigned char *in, int inlen) { p->prompts[0]->result_len); p->prompts[0]->result[p->prompts[0]->result_len-1] = '\0'; memset(cmdline_password, 0, strlen(cmdline_password)); + sfree(cmdline_password); + cmdline_password = NULL; tried_once = 1; return 1; diff --git a/ssh.c b/ssh.c index 23afa6aa..068db3c8 100644 --- a/ssh.c +++ b/ssh.c @@ -2853,6 +2853,8 @@ static int ssh_do_close(Ssh ssh, int notify_exit) del234(ssh->portfwds, pf); /* moving next one to index 0 */ free_portfwd(pf); } + freetree234(ssh->portfwds); + ssh->portfwds = NULL; } return ret; diff --git a/sshrand.c b/sshrand.c index 26fcfe52..b728fd95 100644 --- a/sshrand.c +++ b/sshrand.c @@ -4,6 +4,7 @@ #include "putty.h" #include "ssh.h" +#include /* Collect environmental noise every 5 minutes */ #define NOISE_REGULAR_INTERVAL (5*60*TICKSPERSEC) @@ -225,6 +226,10 @@ void random_ref(void) void random_unref(void) { random_active--; + assert(random_active >= 0); + if (random_active) return; + + expire_timer_context(&pool); } int random_byte(void) -- 2.11.0