@@ -46,38 +46,52 @@ 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- vollog .debug (f"RegEx Pattern: { regex_pattern } " )
49+ def _generator (self , context , layer_name , pattern , maxsize ):
50+ layer = self .context .layers [layer_name ]
51+ vollog .debug (f"RegEx Pattern: { pattern } " )
52+
53+ # Convert string pattern to bytes for RegExScanner
54+ pattern_bytes = pattern .encode ("utf-8" )
55+
56+ # Compile the pattern here to ensure consistency
57+ try :
58+ compiled_pattern = re .compile (pattern_bytes )
59+ except re .error as e :
60+ vollog .error (f"Invalid regex pattern: { e } " )
61+ raise ValueError (f"Invalid regex pattern: { e } " )
5262
53- layer = self .context .layers [self .config ["primary" ]]
5463 for offset in layer .scan (
55- context = self . context , scanner = scanners .RegExScanner (regex_pattern )
64+ context = context , scanner = scanners .RegExScanner (pattern_bytes )
5665 ):
57- result_data = layer .read (offset , self . MAXSIZE_DEFAULT , pad = True )
66+ result_data = layer .read (offset , maxsize , pad = True )
5867
5968 # reapply the regex in order to extract just the match
60- regex_result = re . match ( regex_pattern , result_data )
69+ regex_result = compiled_pattern . search ( result_data )
6170
6271 if regex_result :
63- # the match is within the results_data (e.g. it fits within MAXSIZE_DEFAULT )
72+ # the match is within the results_data (e.g. it fits within maxsize )
6473 # extract just the match itself
6574 regex_match = regex_result .group (0 )
6675 text_result = str (regex_match , encoding = "UTF-8" , errors = "replace" )
6776 bytes_result = regex_match
6877 else :
69- # the match is not with the results_data (e.g. it doesn't fit within MAXSIZE_DEFAULT )
78+ # the match is not with the results_data (e.g. it doesn't fit within maxsize )
7079 text_result = str (result_data , encoding = "UTF-8" , errors = "replace" )
7180 bytes_result = result_data
7281
7382 yield 0 , (format_hints .Hex (offset ), text_result , bytes_result )
7483
7584 def run (self ):
85+ pattern = self .config .get ("pattern" )
86+ maxsize = self .config .get ("maxsize" , self .MAXSIZE_DEFAULT )
87+ layer_name = self .config ["primary" ]
88+ context = self .context
89+
7690 return renderers .TreeGrid (
7791 [
7892 ("Offset" , format_hints .Hex ),
7993 ("Text" , str ),
8094 ("Hex" , bytes ),
8195 ],
82- self ._generator (self . config . get ( " pattern" ) ),
96+ self ._generator (context , layer_name , pattern , maxsize ),
8397 )
0 commit comments