diff options
| author | Stefan Boberg <[email protected]> | 2021-05-13 18:22:09 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-13 18:22:09 +0200 |
| commit | 3672bfa998f932bb306e88bf1202a548bb463f24 (patch) | |
| tree | 4b6b90bef9a42f9cc1a34660d248d985d66177e5 /zencore/iobuffer.cpp | |
| parent | Implemented move-in-place for large CAS payloads (diff) | |
| download | zen-3672bfa998f932bb306e88bf1202a548bb463f24.tar.xz zen-3672bfa998f932bb306e88bf1202a548bb463f24.zip | |
Added logic to guard against accidental file move in file CAS fast path
Now verifies the chunk is referencing an entire file before moving it into place
Diffstat (limited to 'zencore/iobuffer.cpp')
| -rw-r--r-- | zencore/iobuffer.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp index e74287c48..d32a30358 100644 --- a/zencore/iobuffer.cpp +++ b/zencore/iobuffer.cpp @@ -339,7 +339,7 @@ IoBufferBuilder::MakeFromTemporaryFile(const wchar_t* FileName, uint64_t Offset, // We need to open with DELETE since this is used for the case // when a file has been written to a staging directory, and is going - // to be moved in place. + // to be moved in place HRESULT hRes = DataFile.Create(FileName, GENERIC_READ | DELETE, FILE_SHARE_READ | FILE_SHARE_DELETE, OPEN_EXISTING); @@ -361,7 +361,10 @@ IoBufferBuilder::MakeFromTemporaryFile(const wchar_t* FileName, uint64_t Offset, } } - return IoBuffer(IoBuffer::File, DataFile.Detach(), Offset, Size); + IoBuffer Iob(IoBuffer::File, DataFile.Detach(), Offset, Size); + Iob.m_Core->SetIsWholeFile(true); + + return Iob; } return {}; |