diff --git a/CHANGELOG.md b/CHANGELOG.md index e302bc1..5d72ad2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to Diskern are documented here. The format follows ### Fixed +- Chrome caches under macOS `~/Library/Caches` now appear in scan reports - A relative scan root no longer hides every finding a root-anchored rule would have made. `diskern scan tmp` from `/var` reported nothing to clean; roots are resolved to absolute paths before the walk diff --git a/crates/diskern-core/rules/base.json b/crates/diskern-core/rules/base.json index d391a38..ffb5765 100644 --- a/crates/diskern-core/rules/base.json +++ b/crates/diskern-core/rules/base.json @@ -24,7 +24,7 @@ }, { "id": "chrome-cache", - "patterns": ["**/google/chrome/user data/*/cache/**", "**/.cache/google-chrome/**"], + "patterns": ["**/google/chrome/user data/*/cache/**", "**/.cache/google-chrome/**", "**/library/caches/google/chrome/*/cache/**", "**/library/caches/google/chrome/*/code cache/**"], "category": "browser_cache", "verdict": "safe", "description": "Chrome browser cache. Fully regenerated on next use; no effect on installed applications or saved data." diff --git a/crates/diskern-core/src/rules.rs b/crates/diskern-core/src/rules.rs index 25a0b2e..b7c5fc3 100644 --- a/crates/diskern-core/src/rules.rs +++ b/crates/diskern-core/src/rules.rs @@ -370,6 +370,30 @@ mod tests { } } + #[test] + fn chrome_cache_is_safe_to_remove_on_each_platform() { + let db = RulesDb::embedded(); + for path in [ + "/home/u/.cache/google-chrome/Default/Cache/data_0", + "C:\\Users\\x\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Cache\\data_0", + "/Users/x/Library/Caches/Google/Chrome/Default/Cache/data_0", + "/Users/x/Library/Caches/Google/Chrome/Default/Code Cache/js/index", + ] { + let (cat, verdict, rule) = db.classify(std::path::Path::new(path)); + assert_eq!(cat, Category::BrowserCache, "{path} matched {rule:?}"); + assert_eq!(verdict, Verdict::Safe, "{path} matched {rule:?}"); + } + } + + #[test] + fn chrome_profile_data_is_not_safe_to_remove() { + let db = RulesDb::embedded(); + let path = "/Users/x/Library/Application Support/Google/Chrome/Default/History"; + let (cat, verdict, rule) = db.classify(std::path::Path::new(path)); + assert_eq!(cat, Category::Unknown, "{path} matched {rule:?}"); + assert_ne!(verdict, Verdict::Safe, "{path} matched {rule:?}"); + } + /// Issue #40. `/mozilla/firefox/profiles` covered the whole profile /// directory, so bookmarks, history, logins and cookies were listed /// under "Safe to remove" and `quarantine_finding` accepted them. diff --git a/docs/RULES.md b/docs/RULES.md index 50e1949..72f2beb 100644 --- a/docs/RULES.md +++ b/docs/RULES.md @@ -10,7 +10,7 @@ time from [`crates/diskern-core/rules/base.json`](../crates/diskern-core/rules/b ```json { "id": "chrome-cache", - "patterns": ["**/google/chrome/user data/*/cache/**", "**/.cache/google-chrome/**"], + "patterns": ["**/google/chrome/user data/*/cache/**", "**/.cache/google-chrome/**", "**/library/caches/google/chrome/*/cache/**", "**/library/caches/google/chrome/*/code cache/**"], "category": "browser_cache", "verdict": "safe", "description": "Chrome browser cache. Fully regenerated on next use."