aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-13 18:22:09 +0200
committerStefan Boberg <[email protected]>2021-05-13 18:22:09 +0200
commit3672bfa998f932bb306e88bf1202a548bb463f24 (patch)
tree4b6b90bef9a42f9cc1a34660d248d985d66177e5 /zencore/iobuffer.cpp
parentImplemented move-in-place for large CAS payloads (diff)
downloadzen-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.cpp7
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 {};