X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=pageant.c;h=2d9a740236739923800f4d2cfc79a540302c5fdb;hb=refs%2Fheads%2F0.68%2Bkerberos-fix;hp=31a5540c45f9d36275d532de5fad93d6e6f36b50;hpb=54cc0c5b296ee7c27b48a3c8e7aead6e74f2abf1;p=PuTTY.git diff --git a/pageant.c b/pageant.c index 31a5540c..2d9a7402 100644 --- 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; } @@ -1312,11 +1313,15 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase, if (keylist) { if (keylistlen < 4) { *retstr = dupstr("Received broken key list from agent"); + sfree(keylist); + sfree(blob); return PAGEANT_ACTION_FAILURE; } nkeys = toint(GET_32BIT(keylist)); if (nkeys < 0) { *retstr = dupstr("Received broken key list from agent"); + sfree(keylist); + sfree(blob); return PAGEANT_ACTION_FAILURE; } p = keylist + 4; @@ -1334,6 +1339,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 +1349,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 +1359,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 +1371,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 +1381,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 +1429,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 +1453,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 +1531,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 +1584,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; }