Skip to content

Commit d508fa2

Browse files
committed
fix(parser): handle decoding errors gracefully in source extraction
1 parent 04c860f commit d508fa2

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

solc_json_parser/base_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def get_raw_from_src(self, node):
8686
line_number_range_raw = list(map(int, node.get('src').split(':')))
8787
start, offset, source_file_idx = line_number_range_raw
8888
line_number_range, source = self.get_line_number_range_and_source(line_number_range_raw)
89-
raw = source.encode()[start: start+offset].decode()
89+
raw = source.encode()[start: start+offset].decode('utf-8', errors='ignore')
9090
return raw, line_number_range
9191

9292
def get_signature(self, function_name, parameters, kind='function') -> str:

solc_json_parser/combined_json_parser.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,11 @@ def get_line_number_range_and_source(self, line_number_range_raw: list):
221221
start_index, offset, source_file_idx = line_number_range_raw
222222
source_list = self.get_source_list()
223223
source_path = self.__source_path_from_source_list(source_list, source_file_idx)
224-
source_code_bytes = self.__source_code_from_source_path(source_path).encode()
224+
raw_source_code = self.__source_code_from_source_path(source_path)
225+
source_code_bytes = raw_source_code.encode()
225226
start_line = source_code_bytes[:start_index].decode().count('\n') + 1
226227
end_line = start_line + source_code_bytes[start_index:start_index + offset].decode('utf-8', errors='ignore').count('\n')
227-
return (start_line, end_line), source_code_bytes.decode()
228+
return (start_line, end_line), raw_source_code
228229

229230
def source_path_by_contract(self, contract_name) -> Optional[str]:
230231
path = None

0 commit comments

Comments
 (0)