Fix literal-tilde fallback bug in breadarr-shared's expand_home

expand_home() fell through to PathBuf::from(input) — the literal,
unexpanded "~/..." string — whenever the HOME env var itself wasn't set,
same bug class as breadclip-core/breadpad-shared/breadmon (found during
this pass's own crate-migration sweep, in a different shape here: the bug
was in this crate's own tilde-expansion helper rather than a
dirs::xxx().unwrap_or_else() chain). Fixed via bread_utils::xdg::home_dir,
which resolves a real home directory before ever needing to fall back.

Builds and tests clean: 205 passed, 1 pre-existing network-dependent test
ignored, 0 failed.
This commit is contained in:
Breadway 2026-07-17 10:13:06 +08:00
parent 8a2936b8fd
commit 830e80622e
3 changed files with 12 additions and 3 deletions

View file

@ -314,10 +314,16 @@ fn config_path() -> PathBuf {
}
fn expand_home(input: &str) -> PathBuf {
// Was: falls through to `PathBuf::from(input)` — a literal, unexpanded
// "~/..." string — whenever the `HOME` env var itself isn't set.
// PathBuf/std::fs never expand `~`, so that fallback silently produced
// a path relative to the current working directory instead of the
// user's actual home. Same bug class as breadclip-core/breadpad-shared/
// breadmon (see bread_utils::xdg's doc comment); bread_utils::xdg::home_dir
// resolves a real home directory (falling back to `/root`, never a
// literal tilde) before this ever needs to fall back at all.
if let Some(stripped) = input.strip_prefix("~/") {
if let Ok(home) = env::var("HOME") {
return Path::new(&home).join(stripped);
}
return bread_utils::xdg::home_dir().join(stripped);
}
PathBuf::from(input)
}