myuon/quartz

HeapAccessOutOfBoundsのエラーを調査する

Closed this issue · 2 comments

myuon commented
RuntimeError { source: Trap(HeapAccessOutOfBounds),
wasm_trace: [
FrameInfo { module_name: "<module>", func_index: 176, function_name: Some("quartz_core_Header_get_header_flags"), func_start: SourceLoc(50934), instr: SourceLoc(50944) },
FrameInfo { module_name: "<module>", func_index: 170, function_name: Some("quartz_core_Header_get_is_free"), func_start: SourceLoc(50629), instr: SourceLoc(50632) },
FrameInfo { module_name: "<module>", func_index: 164, function_name: Some("quartz_core_find_free_block"), func_start: SourceLoc(50170), instr: SourceLoc(50303) },
FrameInfo { module_name: "<module>", func_index: 163, function_name: Some("quartz_core_alloc_with_rep"), func_start: SourceLoc(49773), instr: SourceLoc(49945) },
FrameInfo { module_name: "<module>", func_index: 65, function_name: Some("quartz_std_string_concat"), func_start: SourceLoc(24800), instr: SourceLoc(24937) },
FrameInfo { module_name: "<module>", func_index: 75, function_name: Some("quartz_std_string_replace_first"), func_start: SourceLoc(26649), instr: SourceLoc(26759) },
FrameInfo { module_name: "<module>", func_index: 28, function_name: Some("quartz_std_format"), func_start: SourceLoc(17130), instr: SourceLoc(17250) },
FrameInfo { module_name: "<module>", func_index: 78, function_name: Some("quartz_std_string_format"), func_start: SourceLoc(27214), instr: SourceLoc(27271) },
FrameInfo { module_name: "<module>", func_index: 394, function_name: Some("quartz_typecheck_Typechecker_expression"), func_start: SourceLoc(485008), instr: SourceLoc(556941) },
FrameInfo { module_name: "<module>", func_index: 395, function_name: Some("quartz_typecheck_Typechecker_check_expression"), func_start: SourceLoc(558063), instr: SourceLoc(558097) }, 
FrameInfo { module_name: "<module>", func_index: 391, function_name: Some("quartz_typecheck_Typechecker_statement"), func_start: SourceLoc(467938), instr: SourceLoc(468604) },
FrameInfo { module_name: "<module>", func_index: 390, function_name: Some("quartz_typecheck_Typechecker_block"), func_start: SourceLoc(467445), instr: SourceLoc(467641) }, 
FrameInfo { module_name: "<module>", func_index: 389, function_name: Some("quartz_typecheck_Typechecker_function"), func_start: SourceLoc(466215), instr: SourceLoc(466850) },
FrameInfo { module_name: "<module>", func_index: 388, function_name: Some("quartz_typecheck_Typechecker_decl"), func_start: SourceLoc(457147), instr: SourceLoc(457940) }, 
FrameInfo { module_name: "<module>", func_index: 385, function_name: Some("quartz_typecheck_Typechecker_module_"), func_start: SourceLoc(449581), instr: SourceLoc(449853) },
FrameInfo { module_name: "<module>", func_index: 388, function_name: Some("quartz_typecheck_Typechecker_decl"), func_start: SourceLoc(457147), instr: SourceLoc(461729) }, 
FrameInfo { module_name: "<module>", func_index: 385, function_name: Some("quartz_typecheck_Typechecker_module_"), func_start: SourceLoc(449581), instr: SourceLoc(449853) },
FrameInfo { module_name: "<module>", func_index: 384, function_name: Some("quartz_typecheck_Typechecker_run"), func_start: SourceLoc(449258), instr: SourceLoc(449300) },
FrameInfo { module_name: "<module>", func_index: 270, function_name: Some("quartz_compiler_Compiler_compile"), func_start: SourceLoc(132901), instr: SourceLoc(133133) },
FrameInfo { module_name: "<module>", func_index: 13, function_name: Some("main_start"), func_start: SourceLoc(6244), instr: SourceLoc(7426) },
FrameInfo { module_name: "<module>", func_index: 15, function_name: Some("main_main"), func_start: SourceLoc(16217), instr: SourceLoc(16246) },
FrameInfo { module_name: "<module>", func_index: 459, function_name: Some("start"), func_start: SourceLoc(797096), instr: SourceLoc(797196) }]
myuon commented

エラー直前のalloc_with_repの引数が以下になっていた

[DEBUG] Pointer(0x400065e0) (0b1000000000000000110010111100000 | 0b1)
[DEBUG] I32(1735541087) (0b1100111011100100100000101011111 | 0b0)

ので、sizeがそもそもおかしくなってそう

myuon commented

string_replace_firstの時点で、終端文字がおかしくなってることがわかる