Handle overflow in Linux's dirent_from_host.
This commit is contained in:
@@ -28,6 +28,7 @@ pub(crate) mod fdentry_impl {
|
|||||||
pub(crate) mod host_impl {
|
pub(crate) mod host_impl {
|
||||||
use super::super::host_impl::dirent_filetype_from_host;
|
use super::super::host_impl::dirent_filetype_from_host;
|
||||||
use crate::{wasi, Error, Result};
|
use crate::{wasi, Error, Result};
|
||||||
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
pub(crate) const O_RSYNC: nix::fcntl::OFlag = nix::fcntl::OFlag::O_RSYNC;
|
pub(crate) const O_RSYNC: nix::fcntl::OFlag = nix::fcntl::OFlag::O_RSYNC;
|
||||||
|
|
||||||
@@ -43,8 +44,8 @@ pub(crate) mod host_impl {
|
|||||||
}
|
}
|
||||||
let d_type = dirent_filetype_from_host(host_entry)?;
|
let d_type = dirent_filetype_from_host(host_entry)?;
|
||||||
entry.d_ino = host_entry.d_ino;
|
entry.d_ino = host_entry.d_ino;
|
||||||
entry.d_next = host_entry.d_off as u64;
|
entry.d_next = u64::try_from(host_entry.d_off).map_err(|_| Error::EOVERFLOW)?;
|
||||||
entry.d_namlen = d_namlen as u32;
|
entry.d_namlen = u32::try_from(d_namlen).map_err(|_| Error::EOVERFLOW)?;
|
||||||
entry.d_type = d_type;
|
entry.d_type = d_type;
|
||||||
Ok(entry)
|
Ok(entry)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user