diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-01 10:14:26 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-01 10:14:26 +0000 |
commit | f80efcc26070bb6d42fca830d80aed3fca82206e (patch) | |
tree | d8f151c766b0b00fa14d916c6f274bbfd8d03950 /libssh/channels.c | |
parent | 2634f45e11020950f1c33b3793532850746d0023 (diff) | |
download | libssh-f80efcc26070bb6d42fca830d80aed3fca82206e.tar.gz libssh-f80efcc26070bb6d42fca830d80aed3fca82206e.tar.xz libssh-f80efcc26070bb6d42fca830d80aed3fca82206e.zip |
Add checks for memory errors in channel functions.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@314 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/channels.c')
-rw-r--r-- | libssh/channels.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/libssh/channels.c b/libssh/channels.c index 457f1dd..3fb3723 100644 --- a/libssh/channels.c +++ b/libssh/channels.c @@ -48,6 +48,10 @@ */ CHANNEL *channel_new(SSH_SESSION *session){ CHANNEL *channel=malloc(sizeof(CHANNEL)); + + if (channel == NULL) { + return NULL; + } memset(channel,0,sizeof(CHANNEL)); channel->session=session; channel->version=session->version; @@ -1107,9 +1111,21 @@ int channel_select(CHANNEL **readchans, CHANNEL **writechans, CHANNEL **exceptch return 0; } /* prepare the outgoing temporary arrays */ - rchans=malloc(sizeof(CHANNEL *) * (count_ptrs(readchans)+1)); - wchans=malloc(sizeof(CHANNEL *) * (count_ptrs(writechans)+1)); - echans=malloc(sizeof(CHANNEL *) * (count_ptrs(exceptchans)+1)); + rchans = malloc(sizeof(CHANNEL *) * (count_ptrs(readchans) + 1)); + if (rchans == NULL) { + return SSH_ERROR; + } + wchans = malloc(sizeof(CHANNEL *) * (count_ptrs(writechans) + 1)); + if (wchans == NULL) { + SAFE_FREE(rchans); + return SSH_ERROR; + } + echans = malloc(sizeof(CHANNEL *) * (count_ptrs(exceptchans) + 1)); + if (echans == NULL) { + SAFE_FREE(rchans); + SAFE_FREE(wchans); + return SSH_ERROR; + } /* first, try without doing network stuff */ /* then, select and redo the networkless stuff */ |