aboutsummaryrefslogtreecommitdiff
path: root/src/packet.c
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2019-10-22 11:26:02 +0200
committerAndreas Schneider <asn@cryptomilk.org>2019-11-18 11:59:01 +0100
commite60fc79542db5776a18e2dd4dff23b05c87b259a (patch)
treef99d6c6c7df6adfa619117c062157e0c3c0bdcbf /src/packet.c
parentc8a621c6063f205e631d83a8ccd4befc60056e93 (diff)
downloadlibssh-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.c28
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;