diff options
author | Dirkjan Bussink <d.bussink@gmail.com> | 2020-12-10 14:14:11 +0000 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2020-12-11 13:35:20 +0100 |
commit | 0987e6065c86f2f52b3c8835a0ad73d7ad082121 (patch) | |
tree | 1130f71b6fc271918046aff4502a3a3090b242a9 /src/messages.c | |
parent | daeee74edd8ac25c1d246d40333e78518574eded (diff) | |
download | libssh-0987e6065c86f2f52b3c8835a0ad73d7ad082121.tar.gz libssh-0987e6065c86f2f52b3c8835a0ad73d7ad082121.tar.xz libssh-0987e6065c86f2f52b3c8835a0ad73d7ad082121.zip |
Always check return value of ssh_list_new()
Another item identified during code review was cases where the return
value of ssh_list_new() was not properly checked and handled. This
updates all cases that were missing this to handle failure to allocate a
new list.
Signed-off-by: Dirkjan Bussink <d.bussink@gmail.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/messages.c')
-rw-r--r-- | src/messages.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/messages.c b/src/messages.c index 25683b23..c7fcc887 100644 --- a/src/messages.c +++ b/src/messages.c @@ -513,24 +513,30 @@ static int ssh_message_termination(void *s){ * @warning This function blocks until a message has been received. Betterset up * a callback if this behavior is unwanted. */ -ssh_message ssh_message_get(ssh_session session) { - ssh_message msg = NULL; - int rc; +ssh_message ssh_message_get(ssh_session session) +{ + ssh_message msg = NULL; + int rc; - msg=ssh_message_pop_head(session); - if(msg) { - return msg; - } - if(session->ssh_message_list == NULL) { - session->ssh_message_list = ssh_list_new(); - } - rc = ssh_handle_packets_termination(session, SSH_TIMEOUT_USER, - ssh_message_termination, session); - if(rc || session->session_state == SSH_SESSION_STATE_ERROR) - return NULL; - msg=ssh_list_pop_head(ssh_message, session->ssh_message_list); + msg = ssh_message_pop_head(session); + if (msg != NULL) { + return msg; + } + if (session->ssh_message_list == NULL) { + session->ssh_message_list = ssh_list_new(); + if (session->ssh_message_list == NULL) { + ssh_set_error_oom(session); + return NULL; + } + } + rc = ssh_handle_packets_termination(session, SSH_TIMEOUT_USER, + ssh_message_termination, session); + if (rc || session->session_state == SSH_SESSION_STATE_ERROR) { + return NULL; + } + msg = ssh_list_pop_head(ssh_message, session->ssh_message_list); - return msg; + return msg; } /** |