mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 18:04:25 +09:00
Fixed possible doulbe free problem found by Bernhard R. Link.
This commit is contained in:
@@ -617,12 +617,14 @@ int channel_default_bufferize(ssh_channel channel, void *data, int len,
|
|||||||
if (channel->stdout_buffer == NULL) {
|
if (channel->stdout_buffer == NULL) {
|
||||||
channel->stdout_buffer = buffer_new();
|
channel->stdout_buffer = buffer_new();
|
||||||
if (channel->stdout_buffer == NULL) {
|
if (channel->stdout_buffer == NULL) {
|
||||||
|
ssh_set_error_oom(session);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer_add_data(channel->stdout_buffer, data, len) < 0) {
|
if (buffer_add_data(channel->stdout_buffer, data, len) < 0) {
|
||||||
buffer_free(channel->stdout_buffer);
|
buffer_free(channel->stdout_buffer);
|
||||||
|
channel->stdout_buffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -630,12 +632,14 @@ int channel_default_bufferize(ssh_channel channel, void *data, int len,
|
|||||||
if (channel->stderr_buffer == NULL) {
|
if (channel->stderr_buffer == NULL) {
|
||||||
channel->stderr_buffer = buffer_new();
|
channel->stderr_buffer = buffer_new();
|
||||||
if (channel->stderr_buffer == NULL) {
|
if (channel->stderr_buffer == NULL) {
|
||||||
|
ssh_set_error_oom(session);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer_add_data(channel->stderr_buffer, data, len) < 0) {
|
if (buffer_add_data(channel->stderr_buffer, data, len) < 0) {
|
||||||
buffer_free(channel->stderr_buffer);
|
buffer_free(channel->stderr_buffer);
|
||||||
|
channel->stderr_buffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user