Permalink
Browse files

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
  • Loading branch information...
jacob
jacob committed Jan 17, 2010
1 parent 32f46b5 commit b72bdf1132e50a6bb5d1d11d4ed239a34866e5e1
Showing with 22 additions and 3 deletions.
  1. +15 −3 cmdline.c
  2. +2 −0 ssh.c
  3. +5 −0 sshrand.c
View
@@ -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;
View
2 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;
View
@@ -4,6 +4,7 @@
#include "putty.h"
#include "ssh.h"
+#include <assert.h>
/* 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)

0 comments on commit b72bdf1

Please sign in to comment.