Skip to content

Commit 24c3bb9

Browse files
authored
Merge pull request #1017 from jiangliu/v6-underflow-2.1
rafs: fix a underflow bug in rafs v6 implementation
2 parents 1916c76 + e3621f5 commit 24c3bb9

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

rafs/src/metadata/direct_v6.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -640,16 +640,15 @@ impl OndiskInodeWrapper {
640640
Ok(chunks)
641641
}
642642

643-
fn find_target_block(&self, name: &OsStr) -> Result<usize> {
643+
fn find_target_block(&self, name: &OsStr) -> Result<Option<usize>> {
644644
let inode = self.disk_inode();
645645
if inode.size() == 0 {
646-
return Err(enoent!());
646+
return Ok(None);
647647
}
648648
let blocks_count = div_round_up(inode.size(), EROFS_BLOCK_SIZE);
649649
// find target block
650650
let mut first = 0;
651651
let mut last = (blocks_count - 1) as i64;
652-
let mut target_block = 0usize;
653652
while first <= last {
654653
let pivot = first + ((last - first) >> 1);
655654
let head_entry = self
@@ -664,15 +663,17 @@ impl OndiskInodeWrapper {
664663
.entry_name(pivot as usize, entries_count - 1, entries_count)
665664
.map_err(err_invalidate_data)?;
666665
if h_name <= name && t_name >= name {
667-
target_block = pivot as usize;
668-
break;
666+
return Ok(Some(pivot as usize));
669667
} else if h_name > name {
668+
if pivot == 0 {
669+
break;
670+
}
670671
last = pivot - 1;
671672
} else {
672673
first = pivot + 1;
673674
}
674675
}
675-
Ok(target_block)
676+
Ok(None)
676677
}
677678
}
678679

@@ -785,7 +786,7 @@ impl RafsInode for OndiskInodeWrapper {
785786
fn get_child_by_name(&self, name: &OsStr) -> Result<Arc<dyn RafsInode>> {
786787
let mut target: Option<u64> = None;
787788
// find target dirent
788-
if let Ok(target_block) = self.find_target_block(name) {
789+
if let Some(target_block) = self.find_target_block(name)? {
789790
let head_entry = self
790791
.get_entry(target_block, 0)
791792
.map_err(err_invalidate_data)?;

0 commit comments

Comments
 (0)