diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-12-07 13:31:36 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-12-07 13:31:36 +0100 |
commit | bbf93e26f836927c3f6bd341abedc92b71867e09 (patch) | |
tree | d2a79e31fb6ebe457f1981894bbc364e65fe0b48 /src/filestore | |
parent | 34ce17e2e90426acf6f5677da4ff1bec2288e98c (diff) |
Add runtime check in StoreRoot::new
This adds a runtime check whether the artifact path is indeed absolute.
A relative artifact path is a bug.
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/filestore')
-rw-r--r-- | src/filestore/artifact.rs | 14 | ||||
-rw-r--r-- | src/filestore/path.rs | 8 | ||||
-rw-r--r-- | src/filestore/util.rs | 2 |
3 files changed, 14 insertions, 10 deletions
diff --git a/src/filestore/artifact.rs b/src/filestore/artifact.rs index 3b9f2e0..38db774 100644 --- a/src/filestore/artifact.rs +++ b/src/filestore/artifact.rs @@ -86,7 +86,7 @@ mod tests { #[test] fn test_parser_one_letter_name() { let p = ArtifactPath::new(PathBuf::from("a-1.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -99,7 +99,7 @@ mod tests { #[test] fn test_parser_multi_letter_name() { let p = ArtifactPath::new(PathBuf::from("foo-1.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -112,7 +112,7 @@ mod tests { #[test] fn test_parser_multi_char_version() { let p = ArtifactPath::new(PathBuf::from("foo-1123.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -125,7 +125,7 @@ mod tests { #[test] fn test_parser_multi_char_version_dashed() { let p = ArtifactPath::new(PathBuf::from("foo-1-1-2-3.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -138,7 +138,7 @@ mod tests { #[test] fn test_parser_multi_char_version_dashed_and_dotted() { let p = ArtifactPath::new(PathBuf::from("foo-1-1.2-3.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -151,7 +151,7 @@ mod tests { #[test] fn test_parser_alnum_version() { let p = ArtifactPath::new(PathBuf::from("foo-1-1.2a3.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); @@ -164,7 +164,7 @@ mod tests { #[test] fn test_parser_package_name_with_number() { let p = ArtifactPath::new(PathBuf::from("foo2-1-1.2a3.ext")).unwrap(); - let root = StoreRoot::new(PathBuf::from("/")); + let root = StoreRoot::new(PathBuf::from("/")).unwrap(); let r = Artifact::parse_path(&root, &p); assert!(r.is_ok(), "Expected to be Ok(_): {:?}", r); diff --git a/src/filestore/path.rs b/src/filestore/path.rs index 9a3e193..25ffbd9 100644 --- a/src/filestore/path.rs +++ b/src/filestore/path.rs @@ -11,8 +11,12 @@ use anyhow::Context; pub struct StoreRoot(PathBuf); impl StoreRoot { - pub (in crate::filestore) fn new(root: PathBuf) -> Self { - StoreRoot(root) + pub (in crate::filestore) fn new(root: PathBuf) -> Result<Self> { + if root.is_absolute() { + Ok(StoreRoot(root)) + } else { + Err(anyhow!("StoreRoot path is not absolute: {}", root.display())) + } } pub (in crate::filestore) fn stripped_from(&self, pb: &Path) -> Result<ArtifactPath> { diff --git a/src/filestore/util.rs b/src/filestore/util.rs index 0eb430e..2dca4e2 100644 --- a/src/filestore/util.rs +++ b/src/filestore/util.rs @@ -30,7 +30,7 @@ impl FileStoreImpl { /// Loads the passed path recursively into a Path => Artifact mapping pub fn load(path: &Path, progress: ProgressBar) -> Result<Self> { if path.is_dir() { - let root = StoreRoot::new(path.to_path_buf()); + let root = StoreRoot::new(path.to_path_buf())?; let store = WalkDir::new(&path) .follow_links(false) |