Fixed yet another read-after-free bug
read of a buffer len after free in sftp_write()
Этот коммит содержится в:
родитель
730af24de8
Коммит
8960992267
@ -1681,6 +1681,7 @@ ssize_t sftp_write(SFTP_FILE *file, const void *buf, size_t count) {
|
|||||||
BUFFER *buffer;
|
BUFFER *buffer;
|
||||||
u32 id;
|
u32 id;
|
||||||
int len;
|
int len;
|
||||||
|
int packetlen;
|
||||||
|
|
||||||
buffer = buffer_new();
|
buffer = buffer_new();
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
@ -1704,12 +1705,12 @@ ssize_t sftp_write(SFTP_FILE *file, const void *buf, size_t count) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
string_free(datastring);
|
string_free(datastring);
|
||||||
|
packetlen=buffer_get_len(buffer);
|
||||||
len = sftp_packet_write(file->sftp, SSH_FXP_WRITE, buffer);
|
len = sftp_packet_write(file->sftp, SSH_FXP_WRITE, buffer);
|
||||||
buffer_free(buffer);
|
buffer_free(buffer);
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if ((u32) len != buffer_get_len(buffer)) {
|
} else if (len != packetlen) {
|
||||||
ssh_log(sftp->session, SSH_LOG_PACKET,
|
ssh_log(sftp->session, SSH_LOG_PACKET,
|
||||||
"Could not write as much data as expected");
|
"Could not write as much data as expected");
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user