diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2013-07-14 14:23:55 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2013-07-14 15:01:57 +0200 |
commit | ecec2abfc733da5f948a1cf26be7a7c927983209 (patch) | |
tree | 8abba1fb5919b5323a364e9506270aae8334b674 | |
parent | 8f0b6ccd66b785e24fc0aae37e11e1fc834bf6ff (diff) | |
download | libssh-ecec2abfc733da5f948a1cf26be7a7c927983209.tar.gz libssh-ecec2abfc733da5f948a1cf26be7a7c927983209.tar.xz libssh-ecec2abfc733da5f948a1cf26be7a7c927983209.zip |
gssapi: Refactor ssh_gssapi_build_mic() to avoid memory leaks.
CID #0
-rw-r--r-- | src/gssapi.c | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/src/gssapi.c b/src/gssapi.c index 9c07b8bf..d8bd2c31 100644 --- a/src/gssapi.c +++ b/src/gssapi.c @@ -360,29 +360,73 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ #endif /* WITH_SERVER */ static ssh_buffer ssh_gssapi_build_mic(ssh_session session){ - ssh_buffer mic_buffer = ssh_buffer_new(); + ssh_buffer mic_buffer; ssh_string str; - if(!mic_buffer){ + int rc; + + str = ssh_string_new(session->current_crypto->digest_len); + if (str == NULL) { return NULL; } - str = ssh_string_new(session->current_crypto->digest_len); - ssh_string_fill(str, session->current_crypto->session_id, session->current_crypto->digest_len); - buffer_add_ssh_string(mic_buffer, str); + ssh_string_fill(str, session->current_crypto->session_id, + session->current_crypto->digest_len); + + mic_buffer = ssh_buffer_new(); + if (mic_buffer == NULL) { + ssh_string_free(str); + return NULL; + } + + rc = buffer_add_ssh_string(mic_buffer, str); ssh_string_free(str); + if (rc < 0) { + ssh_buffer_free(mic_buffer); + return NULL; + } - buffer_add_u8(mic_buffer, SSH2_MSG_USERAUTH_REQUEST); + rc = buffer_add_u8(mic_buffer, SSH2_MSG_USERAUTH_REQUEST); + if (rc < 0) { + ssh_buffer_free(mic_buffer); + return NULL; + } str = ssh_string_from_char(session->gssapi->user); - buffer_add_ssh_string(mic_buffer, str); + if (str == NULL) { + ssh_buffer_free(mic_buffer); + return NULL; + } + + rc = buffer_add_ssh_string(mic_buffer, str); ssh_string_free(str); + if (rc < 0) { + ssh_buffer_free(mic_buffer); + return NULL; + } - str= ssh_string_from_char("ssh-connection"); - buffer_add_ssh_string(mic_buffer, str); + str = ssh_string_from_char("ssh-connection"); + if (str == NULL) { + ssh_buffer_free(mic_buffer); + return NULL; + } + rc = buffer_add_ssh_string(mic_buffer, str); ssh_string_free(str); + if (rc < 0) { + ssh_buffer_free(mic_buffer); + return NULL; + } str = ssh_string_from_char("gssapi-with-mic"); - buffer_add_ssh_string(mic_buffer, str); + if (str == NULL) { + ssh_buffer_free(mic_buffer); + return NULL; + } + + rc = buffer_add_ssh_string(mic_buffer, str); ssh_string_free(str); + if (rc < 0) { + ssh_buffer_free(mic_buffer); + return NULL; + } return mic_buffer; } |