projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Integrate unfix.org's IPv6 patches up to level 10, with rather a lot
[u/mdw/putty]
/
import.c
diff --git
a/import.c
b/import.c
index
1210cc5
..
d1ab751
100644
(file)
--- a/
import.c
+++ b/
import.c
@@
-160,12
+160,11
@@
static int ber_read_id_len(void *source, int sourcelen,
if ((*p & 0x1F) == 0x1F) {
*id = 0;
while (*p & 0x80) {
if ((*p & 0x1F) == 0x1F) {
*id = 0;
while (*p & 0x80) {
- *id = (*id << 7) | (*p & 0x7F);
p++, sourcelen--;
if (sourcelen == 0)
return -1;
p++, sourcelen--;
if (sourcelen == 0)
return -1;
+ *id = (*id << 7) | (*p & 0x7F);
}
}
- *id = (*id << 7) | (*p & 0x7F);
p++, sourcelen--;
} else {
*id = *p & 0x1F;
p++, sourcelen--;
} else {
*id = *p & 0x1F;
@@
-484,9
+483,9
@@
struct ssh2_userkey *openssh_read(const Filename *filename, char *passphrase)
struct ssh2_userkey *retval = NULL;
char *errmsg;
unsigned char *blob;
struct ssh2_userkey *retval = NULL;
char *errmsg;
unsigned char *blob;
- int blobsize, blobptr, privptr;
- char *modptr;
- int modlen;
+ int blobsize
= 0
, blobptr, privptr;
+ char *modptr
= NULL
;
+ int modlen
= 0
;
blob = NULL;
blob = NULL;
@@
-560,6
+559,8
@@
struct ssh2_userkey *openssh_read(const Filename *filename, char *passphrase)
num_integers = 9;
else if (key->type == OSSH_DSA)
num_integers = 6;
num_integers = 9;
else if (key->type == OSSH_DSA)
num_integers = 6;
+ else
+ num_integers = 0; /* placate compiler warnings */
/*
* Space to create key blob in.
/*
* Space to create key blob in.
@@
-581,6
+582,7
@@
struct ssh2_userkey *openssh_read(const Filename *filename, char *passphrase)
if (ret < 0 || id != 2 ||
key->keyblob+key->keyblob_len-p < len) {
errmsg = "ASN.1 decoding failure";
if (ret < 0 || id != 2 ||
key->keyblob+key->keyblob_len-p < len) {
errmsg = "ASN.1 decoding failure";
+ retval = SSH2_WRONG_PASSPHRASE;
goto error;
}
goto error;
}
@@
-667,7
+669,7
@@
int openssh_write(const Filename *filename, struct ssh2_userkey *key,
char *passphrase)
{
unsigned char *pubblob, *privblob, *spareblob;
char *passphrase)
{
unsigned char *pubblob, *privblob, *spareblob;
- int publen, privlen, sparelen;
+ int publen, privlen, sparelen
= 0
;
unsigned char *outblob;
int outlen;
struct mpint_pos numbers[9];
unsigned char *outblob;
int outlen;
struct mpint_pos numbers[9];
@@
-1201,7
+1203,7
@@
struct ssh2_userkey *sshcom_read(const Filename *filename, char *passphrase)
struct ssh2_userkey *ret = NULL, *retkey;
const struct ssh_signkey *alg;
unsigned char *blob = NULL;
struct ssh2_userkey *ret = NULL, *retkey;
const struct ssh_signkey *alg;
unsigned char *blob = NULL;
- int blobsize, publen, privlen;
+ int blobsize
= 0
, publen, privlen;
if (!key)
return NULL;
if (!key)
return NULL;
@@
-1322,7
+1324,7
@@
struct ssh2_userkey *sshcom_read(const Filename *filename, char *passphrase)
* Strip away the containing string to get to the real meat.
*/
len = GET_32BIT(ciphertext);
* Strip away the containing string to get to the real meat.
*/
len = GET_32BIT(ciphertext);
- if (len > cipherlen-4) {
+ if (len
< 0 || len
> cipherlen-4) {
errmsg = "containing string was ill-formed";
goto error;
}
errmsg = "containing string was ill-formed";
goto error;
}
@@
-1389,7
+1391,8
@@
struct ssh2_userkey *sshcom_read(const Filename *filename, char *passphrase)
publen = pos;
pos += put_mp(blob+pos, x.start, x.bytes);
privlen = pos - publen;
publen = pos;
pos += put_mp(blob+pos, x.start, x.bytes);
privlen = pos - publen;
- }
+ } else
+ return NULL;
assert(privlen > 0); /* should have bombed by now if not */
assert(privlen > 0); /* should have bombed by now if not */