From dd06faa7ce3902fc327eb5a8ac48592e3621f06e Mon Sep 17 00:00:00 2001 From: Esa Jokinen Date: Mon, 16 Mar 2026 08:47:19 +0200 Subject: [PATCH 1/2] Add user cache directory as fallback for downloaded symbols --- volatility3/framework/constants/__init__.py | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/volatility3/framework/constants/__init__.py b/volatility3/framework/constants/__init__.py index 689ef122b..684ba7cfd 100644 --- a/volatility3/framework/constants/__init__.py +++ b/volatility3/framework/constants/__init__.py @@ -25,6 +25,18 @@ from volatility3.framework.constants._version import ( REQUIRED_PYTHON_VERSION = (3, 8, 0) +CACHE_PATH = os.path.join( + os.environ.get("XDG_CACHE_HOME") or os.path.join(os.path.expanduser("~"), ".cache"), + "volatility3", +) +"""Default path to store cached data""" + +if sys.platform == "win32": + CACHE_PATH = os.path.realpath( + os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "volatility3") + ) +os.makedirs(CACHE_PATH, exist_ok=True) + PLUGINS_PATH = [ os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "plugins")), os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "plugins")), @@ -34,6 +46,9 @@ PLUGINS_PATH = [ SYMBOL_BASEPATHS = [ os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "symbols")), os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "symbols")), + os.path.abspath( + os.path.join(CACHE_PATH, "symbols") + ), # User cache fallback for automatically downloaded temporary symbols ] """Default list of paths to load symbols from (volatility3/symbols and volatility3/framework/symbols)""" @@ -71,21 +86,9 @@ LOGLEVEL_VVVV = 6 """Logging level for four levels of detail: -vvvvvv""" -CACHE_PATH = os.path.join( - os.environ.get("XDG_CACHE_HOME") or os.path.join(os.path.expanduser("~"), ".cache"), - "volatility3", -) -"""Default path to store cached data""" - SQLITE_CACHE_PERIOD = "-3 days" """SQLite time modifier for how long each item is valid in the cache for""" -if sys.platform == "win32": - CACHE_PATH = os.path.realpath( - os.path.join(os.environ.get("APPDATA", os.path.expanduser("~")), "volatility3") - ) -os.makedirs(CACHE_PATH, exist_ok=True) - IDENTIFIERS_FILENAME = "identifier.cache" """Default location to record information about available identifiers""" From 7707a140926595af9e07012b4476e8bdb03de4e1 Mon Sep 17 00:00:00 2001 From: Esa Jokinen Date: Mon, 16 Mar 2026 15:44:07 +0200 Subject: [PATCH 2/2] PDBUtility: Log per-path symbol write failures at DEBUG level --- volatility3/framework/symbols/windows/pdbutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/volatility3/framework/symbols/windows/pdbutil.py b/volatility3/framework/symbols/windows/pdbutil.py index af86f6997..ccee64c55 100644 --- a/volatility3/framework/symbols/windows/pdbutil.py +++ b/volatility3/framework/symbols/windows/pdbutil.py @@ -289,7 +289,7 @@ class PDBUtility(interfaces.configuration.VersionableInterface): ) break except PermissionError: - vollog.warning( + vollog.debug( f"Cannot write necessary symbol file, please check permissions on {potential_output_filename}" ) continue