gix_status

Struct SymlinkCheck

Source
pub struct SymlinkCheck { /* private fields */ }
Expand description

A stack that validates we are not going through a symlink in a way that is read-only.

It can efficiently validate paths when these are queried in sort-order, which leads to each component to only be checked once.

Implementations§

Source§

impl SymlinkCheck

Source

pub fn new(root: PathBuf) -> Self

Create a new stack that starts operating at root.

Source

pub fn verified_path(&mut self, relative_path: &Path) -> Result<&Path>

Return a valid filesystem path located in our root by appending relative_path, which is guaranteed to not pass through a symbolic link. That way the caller can be sure to not be misled by an attacker that tries to make us reach outside of the repository.

Note that the file pointed to by relative_path may still be a symbolic link, or not exist at all, and that an error may also be produced if directories on the path leading to the leaf component of relative_path are missing.

§Note

On windows, no verification is performed, instead only the combined path is provided as usual.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.