Skip to content

Commit eba4e4b

Browse files
committed
generator overhead
1 parent f01310c commit eba4e4b

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

volatility3/framework/plugins/regexscan.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,12 @@ def get_requirements(cls) -> List[interfaces.configuration.RequirementInterface]
4646
),
4747
]
4848

49-
def _generator(self, regex_pattern):
50-
regex_pattern = bytes(regex_pattern, "UTF-8")
51-
compiled_pattern = re.compile(regex_pattern)
52-
vollog.debug(f"RegEx Pattern: {regex_pattern}")
53-
maxsize = self.config.get("maxsize", self.MAXSIZE_DEFAULT)
49+
def _generator(self, compiled_pattern, raw_pattern, maxsize):
50+
vollog.debug(f"RegEx Pattern: {raw_pattern}")
5451
layer = self.context.layers[self.config["primary"]]
52+
5553
for offset in layer.scan(
56-
context=self.context, scanner=scanners.RegExScanner(regex_pattern)
54+
context=self.context, scanner=scanners.RegExScanner(raw_pattern)
5755
):
5856
result_data = layer.read(offset, maxsize, pad=True)
5957

@@ -74,11 +72,37 @@ def _generator(self, regex_pattern):
7472
yield 0, (format_hints.Hex(offset), text_result, bytes_result)
7573

7674
def run(self):
75+
pattern = self.config.get("pattern")
76+
77+
# Handle pattern encoding robustly
78+
if isinstance(pattern, str):
79+
try:
80+
raw_pattern = pattern.encode("utf-8")
81+
except UnicodeEncodeError:
82+
raw_pattern = pattern.encode("latin1", errors="replace")
83+
else:
84+
raw_pattern = pattern
85+
86+
try:
87+
compiled_pattern = re.compile(raw_pattern)
88+
except re.error as e:
89+
vollog.error(f"Invalid regex pattern: {e}")
90+
return renderers.TreeGrid(
91+
[
92+
("Offset", format_hints.Hex),
93+
("Text", str),
94+
("Hex", bytes),
95+
],
96+
[],
97+
)
98+
99+
maxsize = self.config.get("maxsize", self.MAXSIZE_DEFAULT)
100+
77101
return renderers.TreeGrid(
78102
[
79103
("Offset", format_hints.Hex),
80104
("Text", str),
81105
("Hex", bytes),
82106
],
83-
self._generator(self.config.get("pattern")),
107+
self._generator(compiled_pattern, raw_pattern, maxsize),
84108
)

0 commit comments

Comments
 (0)