From 742b0634b931855a74f39fdb3e9ebbe8142ee7db Mon Sep 17 00:00:00 2001 From: SolitudePy <47316655+SolitudePy@users.noreply.github.com> Date: Wed, 11 Jun 2025 19:30:29 +0300 Subject: [PATCH] readjust _run to contain less code & removal of redundant code --- volatility3/framework/plugins/regexscan.py | 43 ++++++++-------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/volatility3/framework/plugins/regexscan.py b/volatility3/framework/plugins/regexscan.py index e95986899..1f199658e 100644 --- a/volatility3/framework/plugins/regexscan.py +++ b/volatility3/framework/plugins/regexscan.py @@ -46,12 +46,21 @@ class RegExScan(plugins.PluginInterface): ), ] - def _generator(self, compiled_pattern, raw_pattern, maxsize): - vollog.debug(f"RegEx Pattern: {raw_pattern}") - layer = self.context.layers[self.config["primary"]] + def _generator(self, layer, pattern, maxsize): + vollog.debug(f"RegEx Pattern: {pattern}") + + # Convert string pattern to bytes for RegExScanner + pattern_bytes = pattern.encode("utf-8") + + # Compile the pattern here to ensure consistency + try: + compiled_pattern = re.compile(pattern_bytes) + except re.error as e: + vollog.error(f"Invalid regex pattern: {e}") + raise ValueError(f"Invalid regex pattern: {e}") for offset in layer.scan( - context=self.context, scanner=scanners.RegExScanner(raw_pattern) + context=self.context, scanner=scanners.RegExScanner(pattern_bytes) ): result_data = layer.read(offset, maxsize, pad=True) @@ -73,30 +82,8 @@ class RegExScan(plugins.PluginInterface): def run(self): pattern = self.config.get("pattern") - - # Handle pattern encoding robustly - if isinstance(pattern, str): - try: - raw_pattern = pattern.encode("utf-8") - except UnicodeEncodeError: - raw_pattern = pattern.encode("latin1", errors="replace") - else: - raw_pattern = pattern - - try: - compiled_pattern = re.compile(raw_pattern) - except re.error as e: - vollog.error(f"Invalid regex pattern: {e}") - return renderers.TreeGrid( - [ - ("Offset", format_hints.Hex), - ("Text", str), - ("Hex", bytes), - ], - [], - ) - maxsize = self.config.get("maxsize", self.MAXSIZE_DEFAULT) + layer = self.context.layers[self.config["primary"]] return renderers.TreeGrid( [ @@ -104,5 +91,5 @@ class RegExScan(plugins.PluginInterface): ("Text", str), ("Hex", bytes), ], - self._generator(compiled_pattern, raw_pattern, maxsize), + self._generator(layer, pattern, maxsize), )