summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-03 08:29:36 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-03 08:29:36 +0000
commit0856ba3008efb40fcc7d10ba4b2fcd15e7105456 (patch)
treeb0ffaf9f77e2ac4c25a96b0b34379a454b52e4ef
parent8d66a455f7bc796cf21ab5fb37c70d01920739b2 (diff)
downloadlibssh-0856ba3008efb40fcc7d10ba4b2fcd15e7105456.tar.gz
libssh-0856ba3008efb40fcc7d10ba4b2fcd15e7105456.tar.xz
libssh-0856ba3008efb40fcc7d10ba4b2fcd15e7105456.zip
Add memory error checks.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@375 7dcaeef0-15fb-0310-b436-a5af3365683c
-rw-r--r--libssh/server.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libssh/server.c b/libssh/server.c
index 6cc0087b..e7eb0edb 100644
--- a/libssh/server.c
+++ b/libssh/server.c
@@ -214,7 +214,7 @@ extern char *supported_methods[];
static int server_set_kex(SSH_SESSION * session) {
KEX *server = &session->server_kex;
SSH_OPTIONS *options = session->options;
- int i;
+ int i, j;
char *wanted;
memset(server,0,sizeof(KEX));
// the program might ask for a specific cookie to be sent. useful for server
@@ -239,6 +239,13 @@ static int server_set_kex(SSH_SESSION * session) {
if (!(wanted = options->wanted_methods[i]))
wanted = supported_methods[i];
server->methods[i] = strdup(wanted);
+ if (server->methods[i] == NULL) {
+ for (j = i - 1; j <= 0; j--) {
+ SAFE_FREE(server->methods[j]);
+ }
+ SAFE_FREE(server->methods);
+ return -1;
+ }
//printf("server->methods[%d]=%s\n",i,wanted);
}
return 0;