1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-11-30 13:01:23 +03:00

Fix a 0 bytes malloc in server kbdint implementation

This commit is contained in:
milo
2011-04-14 13:28:48 +02:00
parent 934252d6ca
commit 23b28a573c

View File

@@ -860,31 +860,36 @@ int ssh_message_auth_interactive_request(ssh_message msg, const char *name,
} }
msg->session->kbdint->nprompts = num_prompts; msg->session->kbdint->nprompts = num_prompts;
msg->session->kbdint->prompts = malloc(num_prompts * sizeof(char *)); if(num_prompts > 0) {
if (msg->session->kbdint->prompts == NULL) { msg->session->kbdint->prompts = malloc(num_prompts * sizeof(char *));
msg->session->kbdint->nprompts = 0; if (msg->session->kbdint->prompts == NULL) {
ssh_set_error_oom(msg->session); msg->session->kbdint->nprompts = 0;
kbdint_free(msg->session->kbdint);
msg->session->kbdint = NULL;
return SSH_ERROR;
}
msg->session->kbdint->echo = malloc(num_prompts * sizeof(char));
if (msg->session->kbdint->echo == NULL) {
ssh_set_error_oom(msg->session);
kbdint_free(msg->session->kbdint);
msg->session->kbdint = NULL;
return SSH_ERROR;
}
for (i = 0; i < num_prompts; i++) {
msg->session->kbdint->echo[i] = echo[i];
msg->session->kbdint->prompts[i] = strdup(prompts[i]);
if (msg->session->kbdint->prompts[i] == NULL) {
ssh_set_error_oom(msg->session); ssh_set_error_oom(msg->session);
msg->session->kbdint->nprompts = i;
kbdint_free(msg->session->kbdint); kbdint_free(msg->session->kbdint);
msg->session->kbdint = NULL; msg->session->kbdint = NULL;
return SSH_PACKET_USED; return SSH_ERROR;
} }
msg->session->kbdint->echo = malloc(num_prompts * sizeof(char));
if (msg->session->kbdint->echo == NULL) {
ssh_set_error_oom(msg->session);
kbdint_free(msg->session->kbdint);
msg->session->kbdint = NULL;
return SSH_ERROR;
}
for (i = 0; i < num_prompts; i++) {
msg->session->kbdint->echo[i] = echo[i];
msg->session->kbdint->prompts[i] = strdup(prompts[i]);
if (msg->session->kbdint->prompts[i] == NULL) {
ssh_set_error_oom(msg->session);
msg->session->kbdint->nprompts = i;
kbdint_free(msg->session->kbdint);
msg->session->kbdint = NULL;
return SSH_PACKET_USED;
}
}
} else {
msg->session->kbdint->prompts = NULL;
msg->session->kbdint->echo = NULL;
} }
return r; return r;