diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2019-05-28 08:24:33 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2019-05-28 09:18:23 +0200 |
commit | 123db84b2c06cd16b07209d39535ec1a3ddaf503 (patch) | |
tree | 51751206ad94cb28b9692484f5f4304c3e25f680 /src/pki_crypto.c | |
parent | 30997a098c496b8d9ae01f8d5c5e7246badbe190 (diff) | |
download | libssh-123db84b2c06cd16b07209d39535ec1a3ddaf503.tar.gz libssh-123db84b2c06cd16b07209d39535ec1a3ddaf503.tar.xz libssh-123db84b2c06cd16b07209d39535ec1a3ddaf503.zip |
pki_crypto: Fix a possible null pointer dereference
CID 1401438
CID 1401437
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/pki_crypto.c')
-rw-r--r-- | src/pki_crypto.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c index 0949bd96..b5d24b24 100644 --- a/src/pki_crypto.c +++ b/src/pki_crypto.c @@ -1370,14 +1370,19 @@ static ssh_string pki_dsa_signature_to_blob(const ssh_signature sig) ssh_string s = NULL; int s_len, s_offset_in, s_offset_out; - const unsigned char *raw_sig_data = ssh_string_data(sig->raw_sig); - size_t raw_sig_len = ssh_string_len(sig->raw_sig); + const unsigned char *raw_sig_data = NULL; + size_t raw_sig_len; DSA_SIG *dsa_sig; - if (sig == NULL || sig->raw_sig == NULL || raw_sig_data == NULL) { + if (sig == NULL || sig->raw_sig == NULL) { return NULL; } + raw_sig_data = ssh_string_data(sig->raw_sig); + if (raw_sig_data == NULL) { + return NULL; + } + raw_sig_len = ssh_string_len(sig->raw_sig); dsa_sig = d2i_DSA_SIG(NULL, &raw_sig_data, raw_sig_len); if (dsa_sig == NULL) { @@ -1444,16 +1449,21 @@ static ssh_string pki_ecdsa_signature_to_blob(const ssh_signature sig) const BIGNUM *pr = NULL, *ps = NULL; - const unsigned char *raw_sig_data = ssh_string_data(sig->raw_sig); - size_t raw_sig_len = ssh_string_len(sig->raw_sig); + const unsigned char *raw_sig_data = NULL; + size_t raw_sig_len; ECDSA_SIG *ecdsa_sig; int rc; - if (sig == NULL || sig->raw_sig == NULL || raw_sig_data == NULL) { + if (sig == NULL || sig->raw_sig == NULL) { + return NULL; + } + raw_sig_data = ssh_string_data(sig->raw_sig); + if (raw_sig_data == NULL) { return NULL; } + raw_sig_len = ssh_string_len(sig->raw_sig); ecdsa_sig = d2i_ECDSA_SIG(NULL, &raw_sig_data, raw_sig_len); if (ecdsa_sig == NULL) { |