Skip to content

Commit d319643

Browse files
fogtimkroening
andcommitted
fix(mem/fs): fix(mem/fs): test all lseek cases for negative file offsets
Co-authored-by: Martin Kröning <[email protected]>
1 parent 48f3bb8 commit d319643

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

src/fs/mem.rs

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -100,22 +100,16 @@ impl ObjectInterface for RomFileInterface {
100100
let data_len = guard.data.len() as isize;
101101

102102
let new_pos = match whence {
103-
SeekWhence::Set => {
104-
if offset < 0 {
105-
return Err(Errno::Inval);
106-
}
107-
108-
offset
109-
}
103+
SeekWhence::Set => offset,
110104
SeekWhence::Cur => (*pos_guard as isize)
111105
.checked_add(offset)
112106
.ok_or(Errno::Overflow)?,
113107
SeekWhence::End => data_len.checked_add(offset).ok_or(Errno::Overflow)?,
114108
_ => return Err(Errno::Inval),
115109
};
116110

117-
if new_pos <= data_len {
118-
*pos_guard = new_pos.try_into().unwrap();
111+
if (0..=data_len).contains(&new_pos) {
112+
*pos_guard = new_pos as usize;
119113
Ok(new_pos)
120114
} else {
121115
Err(Errno::Inval)
@@ -237,25 +231,23 @@ impl ObjectInterface for RamFileInterface {
237231
let data_len = guard.data.len() as isize;
238232

239233
let new_pos = match whence {
240-
SeekWhence::Set => {
241-
if offset < 0 {
242-
return Err(Errno::Inval);
243-
}
244-
245-
offset
246-
}
234+
SeekWhence::Set => offset,
247235
SeekWhence::Cur => (*pos_guard as isize)
248236
.checked_add(offset)
249237
.ok_or(Errno::Overflow)?,
250238
SeekWhence::End => data_len.checked_add(offset).ok_or(Errno::Overflow)?,
251239
_ => return Err(Errno::Inval),
252240
};
253241

242+
if new_pos < 0 {
243+
return Err(Errno::Inval);
244+
}
245+
254246
if new_pos > data_len {
255247
guard.data.resize(new_pos.try_into().unwrap(), 0);
256248
guard.attr.st_size = guard.data.len().try_into().unwrap();
257249
}
258-
*pos_guard = new_pos.try_into().unwrap();
250+
*pos_guard = new_pos as usize;
259251

260252
Ok(new_pos)
261253
}

0 commit comments

Comments
 (0)