Skip to content

Commit dc073b2

Browse files
committed
[bugfix] workaround if some SegmentMapping refers to end of tar
Currently it could happen on EROFS meta indexes. Signed-off-by: Gao Xiang <[email protected]>
1 parent 62e5e66 commit dc073b2

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/overlaybd/lsmt/file.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,9 +573,19 @@ class LSMTReadOnlyFile : public IFileRW {
573573
// LOG_DEBUG("offset: `, length: `", m.moffset, size);
574574
ssize_t ret = m_files[m.tag]->pread(buf, size, m.moffset * ALIGNMENT);
575575
if (ret < size) {
576-
LOG_ERRNO_RETURN(0, (int)ret,
577-
"failed to read from `-th file ( ` pread return: ` < size: `)",
578-
m.tag, m_files[m.tag], ret, size);
576+
if (ret < 0) {
577+
LOG_ERRNO_RETURN(0, -1,
578+
"failed to read from `-th file ( ` pread return: ` < size: `)",
579+
m.tag, m_files[m.tag], ret, size);
580+
}
581+
size_t ret2 = m_files[m.tag]->pread((char *)buf + ret, size - ret, m.moffset * ALIGNMENT + ret);
582+
if (ret2) {
583+
LOG_ERRNO_RETURN(0, (int)ret,
584+
"failed to read from `-th file ( ` pread return: ` < size: `)",
585+
m.tag, m_files[m.tag], ret, size);
586+
} else {
587+
memset((char *)buf + ret, 0, size - ret);
588+
}
579589
}
580590
lsmt_io_size += ret;
581591
lsmt_io_cnt++;

0 commit comments

Comments
 (0)