Skip to content

Commit

Permalink
fix: the sanitizer error with minimal proxy (#144)
Browse files Browse the repository at this point in the history
  • Loading branch information
hedgar2017 authored Jan 7, 2025
1 parent dd679be commit 6c98693
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
12 changes: 7 additions & 5 deletions src/build/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ impl Build {
);

for (path, contract) in self.contracts.iter_mut() {
let memory_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range(
let bytecode_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range(
contract.build.bytecode.as_slice(),
path.as_str(),
false,
);
let (memory_buffer_linked, object_format) = era_compiler_llvm_context::eravm_link(
memory_buffer,
let (bytecode_buffer_linked, object_format) = era_compiler_llvm_context::eravm_link(
bytecode_buffer,
&linker_symbols,
&factory_dependencies,
)?;
Expand All @@ -71,10 +71,12 @@ impl Build {
era_compiler_common::ObjectFormat::Raw,
"Linked Vyper bytecode cannot be ELF"
);
contract.build.bytecode = memory_buffer_linked.as_slice().to_vec();

// Reassign bytecode only after getting the hash, since `bytecode_buffer_linked` and `contract.build.bytecode` can refer to the same memory segment.
contract.build.bytecode_hash = Some(era_compiler_llvm_context::eravm_hash(
&memory_buffer_linked,
&bytecode_buffer_linked,
)?);
contract.build.bytecode = bytecode_buffer_linked.as_slice().to_vec();
}

Ok(())
Expand Down
8 changes: 5 additions & 3 deletions src/project/contract/llvm_ir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ impl Contract {
/// Compiles the contract, returning the build.
///
pub fn compile(
self,
mut self,
contract_path: &str,
metadata_hash: Option<era_compiler_common::Hash>,
optimizer_settings: era_compiler_llvm_context::OptimizerSettings,
Expand All @@ -44,9 +44,11 @@ impl Contract {
let llvm = inkwell::context::Context::create();
let optimizer = era_compiler_llvm_context::Optimizer::new(optimizer_settings.clone());

let memory_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range_copy(
self.source_code.as_bytes(),
self.source_code.push(char::from(0));
let memory_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range(
&self.source_code.as_bytes()[..self.source_code.len() - 1],
contract_path,
true,
);
let module = llvm
.create_module_from_ir(memory_buffer)
Expand Down

0 comments on commit 6c98693

Please sign in to comment.