summaryrefslogtreecommitdiffstats
path: root/src/filestore
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-12-07 13:31:36 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-12-07 13:31:36 +0100
commitbbf93e26f836927c3f6bd341abedc92b71867e09 (patch)
treed2a79e31fb6ebe457f1981894bbc364e65fe0b48 /src/filestore
parent34ce17e2e90426acf6f5677da4ff1bec2288e98c (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.rs14
-rw-r--r--src/filestore/path.rs8
-rw-r--r--src/filestore/util.rs2
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)