diff --git a/conservancy_beancount/config.py b/conservancy_beancount/config.py index 82a88370b314274fbcba275815144e2a9d993dc5..55b48d1ab8c13329f436233c3d28e63e70022bf8 100644 --- a/conservancy_beancount/config.py +++ b/conservancy_beancount/config.py @@ -81,6 +81,11 @@ class Config: try: cache_root = Path(os.environ['XDG_CACHE_HOME']) except (KeyError, ValueError): + ok = False + else: + # Per the spec, non-absolute paths should be ignored. + ok = cache_root.is_absolute() + if not ok: cache_root = Path.home() / '.cache' return ( self._dir_or_none(cache_root) diff --git a/tests/test_config.py b/tests/test_config.py index 2beac9fe8d18cf3c6ba47e8f47227f02c5b6f025..0b45aae0802070e0b3c6f06e8b6b48c4f7261a2b 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -283,6 +283,13 @@ def test_cache_path_parent_conflict(tmp_path): config = config_mod.Config() assert config.cache_dir_path('TESTcache') is None +def test_relative_xdg_cache_home_ignored(tmp_path): + with update_environ(HOME=tmp_path, + XDG_CACHE_HOME='nonexistent/test/cache/directory/tree'): + config = config_mod.Config() + cache_dir_path = config.cache_dir_path('TESTcache') + assert cache_dir_path == tmp_path / '.cache/TESTcache' + def test_payment_threshold(): threshold = config_mod.Config().payment_threshold() assert threshold == 0