1use std::path::PathBuf;
2
3pub fn pid_running(pid: u32) -> bool {
4 path_exists(PathBuf::from(format!("/proc/{}", pid)))
5}
6
7pub fn path_exists(path: PathBuf) -> bool {
8 std::fs::metadata(path).is_ok()
9}
10
11pub fn valid_filename(name: &str) -> bool {
12 !(name.contains("..") || name.contains(std::path::MAIN_SEPARATOR) || name.contains("\x00"))
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18 use anyhow::Result;
19
20 #[test]
21 fn test_pid_running() -> Result<()> {
22 assert!(pid_running(1));
23 assert!(!pid_running(8675309));
24 Ok(())
25 }
26
27 #[test]
28 fn test_path_exists() -> Result<()> {
29 assert!(path_exists(PathBuf::from("/")));
30 assert!(!path_exists(PathBuf::from("/nonexistent")));
31 Ok(())
32 }
33
34 #[test]
35 fn test_valid_filename() -> Result<()> {
36 for item in vec!["../one", "/vmlinuz", "im\x00smrt", "one/../two"] {
37 assert!(!valid_filename(item));
38 }
39
40 for item in vec!["qemu-8675309.qcow2", "config"] {
41 assert!(valid_filename(item));
42 }
43
44 Ok(())
45 }
46}