Merge pull request #1636 from frank-freihube-rmcan-com/fixTrailingZeros

Trailing zeros in file leading to unexpected file length get set in destination buffer
This commit is contained in:
Nicolas Tsiftes 2016-05-02 13:52:13 +02:00
commit 0e9234dce6
2 changed files with 22 additions and 2 deletions

View File

@ -1098,9 +1098,20 @@ cfs_read(int fd, void *buf, unsigned size)
fdp = &coffee_fd_set[fd];
file = fdp->file;
if(fdp->offset + size > file->end) {
size = file->end - fdp->offset;
#if COFFEE_IO_SEMANTICS
if(fdp->io_flags & CFS_COFFEE_IO_ENSURE_READ_LENGTH) {
while(fdp->offset + size > file->end) {
((char*)buf)[--size] = 0;
}
} else {
#endif
if(fdp->offset + size > file->end) {
size = file->end - fdp->offset;
}
#if COFFEE_IO_SEMANTICS
}
#endif
/* If the file is not modified, read directly from the file extent. */
if(!FILE_MODIFIED(file)) {

View File

@ -63,6 +63,15 @@
*/
#define CFS_COFFEE_IO_FIRM_SIZE 0x2
/**
* Instruct Coffee to set unused bytes in the destination buffer to zero.
* Trailing zeros may cause a wrong file size, this option ensures that
* the corresponding bytes get set, so Coffee does not read unexpected data.
*
* \sa cfs_coffee_set_io_semantics()
*/
#define CFS_COFFEE_IO_ENSURE_READ_LENGTH 0x4
/**
* \file
* Header for the Coffee file system.