~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Report an error if deleting a random seed file fails.
[sgt/putty]
/
sshpubk.c
diff --git
a/sshpubk.c
b/sshpubk.c
index
bd3c5e4
..
ac9e0fa
100644
(file)
--- a/
sshpubk.c
+++ b/
sshpubk.c
@@
-67,14
+67,15
@@
static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only,
i += 4;
/* Now the serious stuff. An ordinary SSH-1 public key. */
i += 4;
/* Now the serious stuff. An ordinary SSH-1 public key. */
-
i +
= makekey(buf + i, len, key, NULL, 1);
- if (
i
< 0)
+
j
= makekey(buf + i, len, key, NULL, 1);
+ if (
j
< 0)
goto end; /* overran */
goto end; /* overran */
+ i += j;
/* Next, the comment field. */
/* Next, the comment field. */
- j =
GET_32BIT(buf + i
);
+ j =
toint(GET_32BIT(buf + i)
);
i += 4;
i += 4;
- if (len - i < j)
+ if (
j < 0 ||
len - i < j)
goto end;
comment = snewn(j + 1, char);
if (comment) {
goto end;
comment = snewn(j + 1, char);
if (comment) {
@@
-462,7
+463,7
@@
static int read_header(FILE * fp, char *header)
int len = 39;
int c;
int len = 39;
int c;
- while (
len > 0
) {
+ while (
1
) {
c = fgetc(fp);
if (c == '\n' || c == '\r' || c == EOF)
return 0; /* failure */
c = fgetc(fp);
if (c == '\n' || c == '\r' || c == EOF)
return 0; /* failure */
@@
-1007,6
+1008,8
@@
int ssh2_userkey_encrypted(const Filename *filename, char **commentptr)
if (commentptr)
*commentptr = comment;
if (commentptr)
*commentptr = comment;
+ else
+ sfree(comment);
fclose(fp);
if (!strcmp(b, "aes256-cbc"))
fclose(fp);
if (!strcmp(b, "aes256-cbc"))