X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=import.c;h=bc35a4ab7d08b5aebb64332e7d0b84dad2f50bb2;hb=cc66c86e7311c97db09da989c340ba3108c9e14f;hp=77a32437a25fbc3de6d911c3b49569d73ae48a32;hpb=1dabc578a9419783836b4808a9afc265ab2e718c;p=PuTTY.git diff --git a/import.c b/import.c index 77a32437..bc35a4ab 100644 --- a/import.c +++ b/import.c @@ -372,6 +372,7 @@ static struct openssh_key *load_openssh_key(const Filename *filename, if (0 == strncmp(line, "-----END ", 9) && 0 == strcmp(line+strlen(line)-16, "PRIVATE KEY-----")) { sfree(line); + line = NULL; break; /* done */ } if ((p = strchr(line, ':')) != NULL) { @@ -1095,6 +1096,7 @@ static struct sshcom_key *load_sshcom_key(const Filename *filename, strip_crlf(line); if (!strcmp(line, "---- END SSH2 ENCRYPTED PRIVATE KEY ----")) { sfree(line); + line = NULL; break; /* done */ } if ((p = strchr(line, ':')) != NULL) { @@ -1245,11 +1247,15 @@ int sshcom_encrypted(const Filename *filename, char **comment) answer = 1; done: - *comment = dupstr(key ? key->comment : ""); - smemclr(key->keyblob, key->keyblob_size); - sfree(key->keyblob); - smemclr(key, sizeof(*key)); - sfree(key); + if (key) { + *comment = dupstr(key->comment); + smemclr(key->keyblob, key->keyblob_size); + sfree(key->keyblob); + smemclr(key, sizeof(*key)); + sfree(key); + } else { + *comment = dupstr(""); + } return answer; } @@ -1474,9 +1480,11 @@ struct ssh2_userkey *sshcom_read(const Filename *filename, char *passphrase, pos += put_mp(blob+pos, u.start, u.bytes); privlen = pos - publen; } else { - assert(type == DSA); /* the only other option from the if above */ struct mpint_pos p, q, g, x, y; int pos = 4; + + assert(type == DSA); /* the only other option from the if above */ + if (GET_32BIT(ciphertext) != 0) { errmsg = "predefined DSA parameters not supported"; goto error;