StorePath::new(): Check store directory
This commit is contained in:
parent
410acd29c0
commit
14d82baba4
|
@ -34,7 +34,8 @@ pub extern "C" fn ffi_StorePath_new(
|
||||||
path: &str,
|
path: &str,
|
||||||
store_dir: &str,
|
store_dir: &str,
|
||||||
) -> Result<StorePath, error::CppException> {
|
) -> Result<StorePath, error::CppException> {
|
||||||
StorePath::new(std::path::Path::new(path), store_dir).map_err(|err| err.into())
|
StorePath::new(std::path::Path::new(path), std::path::Path::new(store_dir))
|
||||||
|
.map_err(|err| err.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
|
@ -4,6 +4,7 @@ use std::fmt;
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
InvalidPath(crate::store::StorePath),
|
InvalidPath(crate::store::StorePath),
|
||||||
BadStorePath(std::path::PathBuf),
|
BadStorePath(std::path::PathBuf),
|
||||||
|
NotInStore(std::path::PathBuf),
|
||||||
BadNarInfo,
|
BadNarInfo,
|
||||||
BadBase32,
|
BadBase32,
|
||||||
StorePathNameEmpty,
|
StorePathNameEmpty,
|
||||||
|
@ -46,6 +47,9 @@ impl fmt::Display for Error {
|
||||||
Error::InvalidPath(_) => write!(f, "invalid path"),
|
Error::InvalidPath(_) => write!(f, "invalid path"),
|
||||||
Error::BadNarInfo => write!(f, ".narinfo file is corrupt"),
|
Error::BadNarInfo => write!(f, ".narinfo file is corrupt"),
|
||||||
Error::BadStorePath(path) => write!(f, "path '{}' is not a store path", path.display()),
|
Error::BadStorePath(path) => write!(f, "path '{}' is not a store path", path.display()),
|
||||||
|
Error::NotInStore(path) => {
|
||||||
|
write!(f, "path '{}' is not in the Nix store", path.display())
|
||||||
|
}
|
||||||
Error::BadBase32 => write!(f, "invalid base32 string"),
|
Error::BadBase32 => write!(f, "invalid base32 string"),
|
||||||
Error::StorePathNameEmpty => write!(f, "store path name is empty"),
|
Error::StorePathNameEmpty => write!(f, "store path name is empty"),
|
||||||
Error::StorePathNameTooLong => {
|
Error::StorePathNameTooLong => {
|
||||||
|
|
|
@ -13,8 +13,10 @@ pub const STORE_PATH_HASH_BYTES: usize = 20;
|
||||||
pub const STORE_PATH_HASH_CHARS: usize = 32;
|
pub const STORE_PATH_HASH_CHARS: usize = 32;
|
||||||
|
|
||||||
impl StorePath {
|
impl StorePath {
|
||||||
pub fn new(path: &Path, _store_dir: &str) -> Result<Self, Error> {
|
pub fn new(path: &Path, store_dir: &Path) -> Result<Self, Error> {
|
||||||
// FIXME: check store_dir
|
if path.parent() != Some(store_dir) {
|
||||||
|
return Err(Error::NotInStore(path.into()));
|
||||||
|
}
|
||||||
Self::new_from_base_name(
|
Self::new_from_base_name(
|
||||||
path.file_name()
|
path.file_name()
|
||||||
.ok_or(Error::BadStorePath(path.into()))?
|
.ok_or(Error::BadStorePath(path.into()))?
|
||||||
|
|
Loading…
Reference in a new issue