Update dependencies, disable registration and improve path handling

This commit is contained in:
Cameron Cordes
2021-02-02 13:57:51 -05:00
parent acad71701e
commit f20a8a5842
5 changed files with 328 additions and 291 deletions

View File

@@ -1,9 +1,11 @@
use path_absolutize::*;
use std::ffi::OsStr;
use std::fs::read_dir;
use std::io;
use std::io::Error;
use std::path::{Path, PathBuf};
use path_absolutize::*;
pub fn list_files(dir: PathBuf) -> io::Result<Vec<PathBuf>> {
let files = read_dir(dir)?
.map(|res| res.unwrap())
@@ -43,44 +45,37 @@ pub fn is_valid_path(path: &str) -> Option<PathBuf> {
}
fn is_valid_full_path(base: &Path, path: &str) -> Option<PathBuf> {
let path = PathBuf::from(path);
let mut path = PathBuf::from(path);
if path.is_relative() {
let mut full_path = PathBuf::from(base);
full_path.push(&path);
full_path
.absolutize()
.and_then(|p| {
if p.starts_with(base) {
Ok(p.into_owned())
} else {
Err(io::Error::new(
io::ErrorKind::Other,
"Path below base directory",
))
}
})
.ok()
} else if let Ok(path) = path.absolutize().and_then(|path| {
if path.starts_with(base) {
Ok(path.into_owned())
} else {
Err(io::Error::new(
io::ErrorKind::Other,
"Path below base directory",
))
}
}) {
is_path_above_base_dir(base, &mut full_path).ok()
} else if let Ok(path) = is_path_above_base_dir(base, &mut path) {
Some(path)
} else {
None
}
}
fn is_path_above_base_dir(base: &Path, full_path: &mut PathBuf) -> Result<PathBuf, Error> {
full_path.absolutize().and_then(|p| {
if p.starts_with(base) {
Ok(p.into_owned())
} else {
Err(io::Error::new(
io::ErrorKind::Other,
"Path below base directory",
))
}
})
}
#[cfg(test)]
mod tests {
use super::*;
use std::env;
use std::fs::{create_dir_all, File};
use std::fs::File;
use super::*;
#[test]
fn directory_traversal_test() {
@@ -104,8 +99,6 @@ mod tests {
let path = "relative/path/test.png";
let mut test_file = PathBuf::from(&base);
test_file.push(path);
create_dir_all(test_file.parent().unwrap()).unwrap();
File::create(test_file).unwrap();
assert_eq!(
Some(PathBuf::from("/tmp/relative/path/test.png")),
@@ -125,8 +118,6 @@ mod tests {
let path = "relative/path/test.png";
let mut test_file = PathBuf::from(&base);
test_file.push(path);
create_dir_all(test_file.parent().unwrap()).unwrap();
File::create(test_file).unwrap();
assert_eq!(
Some(PathBuf::from("/tmp/relative/path/test.png")),