From 197764afcc1ee169b8d9fad03819fad162b8e8d9 Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Fri, 13 Apr 2007 18:28:10 +0000 Subject: [PATCH] Properly propagate out of memory errors. --- src/channel.c | 4 ++++ src/hostkey.c | 8 ++++---- src/transport.c | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/channel.c b/src/channel.c index 27010b0..61be7b7 100644 --- a/src/channel.c +++ b/src/channel.c @@ -1036,6 +1036,10 @@ ssize_t _libssh2_channel_read_ex(LIBSSH2_CHANNEL *channel, do { rc = libssh2_packet_read(session); } while (rc > 0); + + if((rc < 0) && (rc != PACKET_EAGAIN)) { + return rc; + } rc = 0; /* restore blocking state */ diff --git a/src/hostkey.c b/src/hostkey.c index d82dad2..64d79d8 100644 --- a/src/hostkey.c +++ b/src/hostkey.c @@ -317,13 +317,13 @@ static int libssh2_hostkey_method_ssh_dss_signv(LIBSSH2_SESSION *session, unsign unsigned int i; *signature = LIBSSH2_ALLOC(session, 2 * SHA_DIGEST_LENGTH); - *signature_len = 2 * SHA_DIGEST_LENGTH; - memset(*signature, 0, 2 * SHA_DIGEST_LENGTH); - - if (!(*signature)) { + if (!*signature) { return -1; } + *signature_len = 2 * SHA_DIGEST_LENGTH; + memset(*signature, 0, 2 * SHA_DIGEST_LENGTH); + libssh2_sha1_init(&ctx); for(i = 0; i < veccount; i++) { libssh2_sha1_update(ctx, datavec[i].iov_base, datavec[i].iov_len); diff --git a/src/transport.c b/src/transport.c index ee0c798..7963132 100644 --- a/src/transport.c +++ b/src/transport.c @@ -220,7 +220,8 @@ static libssh2pack_t fullpacket(LIBSSH2_SESSION *session, debugdump(session, "libssh2_packet_read() plain", p->payload, payload_len); - libssh2_packet_add(session, p->payload, payload_len, macstate); + if (libssh2_packet_add(session, p->payload, payload_len, macstate) < 0) + return PACKET_FAIL; return packet_type; }