diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2019-10-22 11:26:02 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2019-11-18 11:59:01 +0100 |
commit | e60fc79542db5776a18e2dd4dff23b05c87b259a (patch) | |
tree | f99d6c6c7df6adfa619117c062157e0c3c0bdcbf /src/packet.c | |
parent | c8a621c6063f205e631d83a8ccd4befc60056e93 (diff) | |
download | libssh-e60fc79542db5776a18e2dd4dff23b05c87b259a.tar.gz libssh-e60fc79542db5776a18e2dd4dff23b05c87b259a.tar.xz libssh-e60fc79542db5776a18e2dd4dff23b05c87b259a.zip |
SSH-01-003: Add cipher NULL checks to ssh_packet_get_current_crypto()
Fixes T183
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Diffstat (limited to 'src/packet.c')
-rw-r--r-- | src/packet.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/packet.c b/src/packet.c index dc844830..80e2a982 100644 --- a/src/packet.c +++ b/src/packet.c @@ -939,18 +939,38 @@ struct ssh_crypto_struct * ssh_packet_get_current_crypto(ssh_session session, enum ssh_crypto_direction_e direction) { + struct ssh_crypto_struct *crypto = NULL; + if (session == NULL) { return NULL; } if (session->current_crypto != NULL && session->current_crypto->used & direction) { - return session->current_crypto; + crypto = session->current_crypto; + } else if (session->next_crypto != NULL && + session->next_crypto->used & direction) { + crypto = session->next_crypto; + } else { + return NULL; } - if (session->next_crypto != NULL && - session->next_crypto->used & direction) { - return session->next_crypto; + switch (direction) { + case SSH_DIRECTION_IN: + if (crypto->in_cipher != NULL) { + return crypto; + } + break; + case SSH_DIRECTION_OUT: + if (crypto->out_cipher != NULL) { + return crypto; + } + break; + case SSH_DIRECTION_BOTH: + if (crypto->in_cipher != NULL && + crypto->out_cipher != NULL) { + return crypto; + } } return NULL; |