More memory error checks for ssh_socket_new().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@329 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
родитель
b06c167775
Коммит
1b627b3867
@ -186,6 +186,14 @@ SSH_SESSION *ssh_bind_accept(SSH_BIND *ssh_bind){
|
||||
|
||||
ssh_socket_free(session->socket);
|
||||
session->socket=ssh_socket_new(session);
|
||||
if (session->socket == NULL) {
|
||||
if (dsa)
|
||||
private_key_free(dsa);
|
||||
if (rsa)
|
||||
private_key_free(rsa);
|
||||
ssh_cleanup(session);
|
||||
return NULL;
|
||||
}
|
||||
ssh_socket_set_fd(session->socket,fd);
|
||||
session->dsa_key=dsa;
|
||||
session->rsa_key=rsa;
|
||||
|
@ -44,7 +44,10 @@ SSH_SESSION *ssh_new(void) {
|
||||
memset(session,0,sizeof(SSH_SESSION));
|
||||
session->next_crypto=crypto_new();
|
||||
session->maxchannel=FIRST_CHANNEL;
|
||||
session->socket=ssh_socket_new(session);
|
||||
session->socket = ssh_socket_new(session);
|
||||
if (session->socket == NULL) {
|
||||
goto err;
|
||||
}
|
||||
session->alive=0;
|
||||
session->auth_methods=0;
|
||||
session->blocking=1;
|
||||
|
@ -88,22 +88,32 @@ void ssh_socket_init(void) {
|
||||
* \internal
|
||||
* \brief creates a new Socket object
|
||||
*/
|
||||
struct socket *ssh_socket_new(SSH_SESSION *session){
|
||||
struct socket *s;
|
||||
struct socket *ssh_socket_new(SSH_SESSION *session) {
|
||||
struct socket *s;
|
||||
|
||||
s = malloc(sizeof(struct socket));
|
||||
if (s = NULL) {
|
||||
return NULL;
|
||||
}
|
||||
s->fd=-1;
|
||||
s->last_errno=-1;
|
||||
s->session=session;
|
||||
s->in_buffer=buffer_new();
|
||||
s->out_buffer=buffer_new();
|
||||
s->data_to_read=0;
|
||||
s->data_to_write=0;
|
||||
s->data_except=0;
|
||||
return s;
|
||||
s = malloc(sizeof(struct socket));
|
||||
if (s == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
s->fd = -1;
|
||||
s->last_errno = -1;
|
||||
s->session = session;
|
||||
s->in_buffer = buffer_new();
|
||||
if (s->in_buffer == NULL) {
|
||||
SAFE_FREE(s);
|
||||
return NULL;
|
||||
}
|
||||
s->out_buffer=buffer_new();
|
||||
if (s->out_buffer == NULL) {
|
||||
buffer_free(s->in_buffer);
|
||||
SAFE_FREE(s);
|
||||
return NULL;
|
||||
}
|
||||
s->data_to_read = 0;
|
||||
s->data_to_write = 0;
|
||||
s->data_except = 0;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
/* \internal
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user