summaryrefslogtreecommitdiffstats
path: root/libssh/channels.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-11-18 15:35:15 +0100
committerAndreas Schneider <mail@cynapses.org>2009-11-18 15:35:15 +0100
commite9397868363d004750a99fc6ed97f25eba97bd6d (patch)
tree653cdd5a665109faadac4505df657353986256cb /libssh/channels.c
parent11cc5f5815462598f52cb4250b7af5e147c9574e (diff)
downloadlibssh-e9397868363d004750a99fc6ed97f25eba97bd6d.tar.gz
libssh-e9397868363d004750a99fc6ed97f25eba97bd6d.tar.xz
libssh-e9397868363d004750a99fc6ed97f25eba97bd6d.zip
Fixed possible doulbe free problem found by Bernhard R. Link.
Diffstat (limited to 'libssh/channels.c')
-rw-r--r--libssh/channels.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libssh/channels.c b/libssh/channels.c
index 5cfb2ff1..60d2b098 100644
--- a/libssh/channels.c
+++ b/libssh/channels.c
@@ -617,12 +617,14 @@ int channel_default_bufferize(ssh_channel channel, void *data, int len,
if (channel->stdout_buffer == NULL) {
channel->stdout_buffer = buffer_new();
if (channel->stdout_buffer == NULL) {
+ ssh_set_error_oom(session);
return -1;
}
}
if (buffer_add_data(channel->stdout_buffer, data, len) < 0) {
buffer_free(channel->stdout_buffer);
+ channel->stdout_buffer = NULL;
return -1;
}
} else {
@@ -630,12 +632,14 @@ int channel_default_bufferize(ssh_channel channel, void *data, int len,
if (channel->stderr_buffer == NULL) {
channel->stderr_buffer = buffer_new();
if (channel->stderr_buffer == NULL) {
+ ssh_set_error_oom(session);
return -1;
}
}
if (buffer_add_data(channel->stderr_buffer, data, len) < 0) {
buffer_free(channel->stderr_buffer);
+ channel->stderr_buffer = NULL;
return -1;
}
}