diff options
author | djm@openbsd.org <djm@openbsd.org> | 2019-01-21 09:54:11 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2019-01-21 21:47:28 +1100 |
commit | 7be8572b32a15d5c3dba897f252e2e04e991c307 (patch) | |
tree | 449782dce059d2eb8d28aaa3baeaedd876b915a2 /sshbuf-getput-crypto.c | |
parent | 803178bd5da7e72be94ba5b4c4c196d4b542da4d (diff) |
upstream: Make sshpkt_get_bignum2() allocate the bignum it is
parsing rather than make the caller do it. Saves a lot of boilerplate code.
from markus@ ok djm@
OpenBSD-Commit-ID: 576bf784f9a240f5a1401f7005364e59aed3bce9
Diffstat (limited to 'sshbuf-getput-crypto.c')
-rw-r--r-- | sshbuf-getput-crypto.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/sshbuf-getput-crypto.c b/sshbuf-getput-crypto.c index a49b72ef7..3dd1e1446 100644 --- a/sshbuf-getput-crypto.c +++ b/sshbuf-getput-crypto.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: sshbuf-getput-crypto.c,v 1.6 2019/01/21 09:52:25 djm Exp $ */ | 1 | /* $OpenBSD: sshbuf-getput-crypto.c,v 1.7 2019/01/21 09:54:11 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2011 Damien Miller | 3 | * Copyright (c) 2011 Damien Miller |
4 | * | 4 | * |
@@ -32,16 +32,25 @@ | |||
32 | #include "sshbuf.h" | 32 | #include "sshbuf.h" |
33 | 33 | ||
34 | int | 34 | int |
35 | sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM *v) | 35 | sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp) |
36 | { | 36 | { |
37 | BIGNUM *v; | ||
37 | const u_char *d; | 38 | const u_char *d; |
38 | size_t len; | 39 | size_t len; |
39 | int r; | 40 | int r; |
40 | 41 | ||
42 | if (valp != NULL) | ||
43 | *valp = NULL; | ||
41 | if ((r = sshbuf_get_bignum2_bytes_direct(buf, &d, &len)) != 0) | 44 | if ((r = sshbuf_get_bignum2_bytes_direct(buf, &d, &len)) != 0) |
42 | return r; | 45 | return r; |
43 | if (v != NULL && BN_bin2bn(d, len, v) == NULL) | 46 | if (valp != NULL) { |
44 | return SSH_ERR_ALLOC_FAIL; | 47 | if ((v = BN_new()) == NULL || |
48 | BN_bin2bn(d, len, v) == NULL) { | ||
49 | BN_clear_free(v); | ||
50 | return SSH_ERR_ALLOC_FAIL; | ||
51 | } | ||
52 | *valp = v; | ||
53 | } | ||
45 | return 0; | 54 | return 0; |
46 | } | 55 | } |
47 | 56 | ||