Package: atftp Version: 0.7.dfsg-9.2 Severity: normal Tags: patch upstream To reproduce the problem: 1. create a small ramdisk 2. almost fill the ramdisk (leave some free bytes) 3. transfer a file bigger than the available space can fit
atftp -g -r somefile someserver echo $? 0 Despite exiting cleanly as seen above, strace shows that write() is complaining: write(4, "]\260\333\0\257\300\377'\334S\374\204p\303&\...@h\23\0h\350\23\0`\350\23\0p5\0\0\320"..., 190) = -1 ENOSPC (No space left on device) the attached patch fixes the problem. Regards, Davide
diff --git a/tftp_file.c b/tftp_file.c index 579d4ec..2955e69 100644 --- a/tftp_file.c +++ b/tftp_file.c @@ -532,7 +532,7 @@ int tftp_receive_file(struct client_data *data) data->local_file); tftp_send_error(sockfd, &sa, ENOSPACE, data->data_buffer, data->data_buffer_size); - state = S_END; + state = S_ABORT; break; } data->file_size += data_size; diff --git a/tftp_io.c b/tftp_io.c index c6beb40..7b987b4 100644 --- a/tftp_io.c +++ b/tftp_io.c @@ -430,8 +430,10 @@ int tftp_file_write(FILE *fp, char *data_buffer, int data_buffer_size, int block if (!convert) { /* Simple case, just seek and write */ - fseek(fp, (block_number - 1) * data_buffer_size, SEEK_SET); - data_size = fwrite(data_buffer, 1, data_size, fp); + if (fseek(fp, (block_number - 1) * data_buffer_size, SEEK_SET) == 0) + data_size = fwrite(data_buffer, 1, data_size, fp); + else + data_size = 0; return data_size; } else
signature.asc
Description: Digital signature