Mirror von
https://github.com/tkuschel/bees.git
synchronisiert 2026-05-08 04:59:37 +02:00
scan: fix length mismatch exception for prealloc extents at EOF
Prealloc extent sizes were taken from the Extent object and did not take the file size into account. If a file with a non-4K-aligned size is preallocated, the resulting dedup fails with an exception because the size of both ranges of the BeesRangePair do not match. Limit the size of the replacement hole extent to not extend past the end of the file. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
Dieser Commit ist enthalten in:
@@ -298,7 +298,9 @@ BeesContext::scan_one_extent(const BeesFileRange &bfr, const Extent &e)
|
||||
// Prealloc is all zero and we replace it with a hole.
|
||||
// No special handling is required here. Nuke it and move on.
|
||||
BEESLOGINFO("prealloc extent " << e);
|
||||
BeesFileRange prealloc_bfr(m_ctx->tmpfile()->make_hole(e.size()));
|
||||
// Must not extend past EOF
|
||||
auto extent_size = min(e.end(), bfr.file_size()) - e.begin();
|
||||
BeesFileRange prealloc_bfr(m_ctx->tmpfile()->make_hole(extent_size));
|
||||
BeesRangePair brp(prealloc_bfr, bfr);
|
||||
// Raw dedup here - nothing else to do with this extent, nothing to merge with
|
||||
if (m_ctx->dedup(brp)) {
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren