@@ -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