From 8620cc03f872dabeadffd0c0abd3633857aeca63 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 24 Apr 2010 13:14:12 +0200 Subject: [PATCH] channel_request_pty: simplify the code clang-analyzer pointed out how 'data' could be accessed as a NULL pointer if the wrong state was set, and while I don't see that happen in real-life the code flow is easier to read and follow by moving the LIBSSH2_FREE() call into the block that is supposed to deal with the data pointer anyway. --- src/channel.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/channel.c b/src/channel.c index 8764d00..1275b56 100644 --- a/src/channel.c +++ b/src/channel.c @@ -919,6 +919,7 @@ static int channel_request_pty(LIBSSH2_CHANNEL *channel, } if (channel->reqPTY_state == libssh2_NB_state_sent) { + unsigned char code; rc = _libssh2_packet_requirev(session, reply_codes, &data, &data_len, 1, channel->reqPTY_local_channel, 4, &channel->reqPTY_packet_requirev_state); @@ -929,14 +930,15 @@ static int channel_request_pty(LIBSSH2_CHANNEL *channel, return -1; } - if (data[0] == SSH_MSG_CHANNEL_SUCCESS) { - LIBSSH2_FREE(session, data); - channel->reqPTY_state = libssh2_NB_state_idle; + code = data[0]; + + LIBSSH2_FREE(session, data); + channel->reqPTY_state = libssh2_NB_state_idle; + + if (code == SSH_MSG_CHANNEL_SUCCESS) return 0; - } } - LIBSSH2_FREE(session, data); channel->reqPTY_state = libssh2_NB_state_idle; return _libssh2_error(session, LIBSSH2_ERROR_CHANNEL_REQUEST_DENIED, "Unable to complete request for channel request-pty");