From 4128b04253f2a0b93548afae0342edba44a0bd66 Mon Sep 17 00:00:00 2001 From: chriseth Date: Thu, 20 Aug 2015 20:02:38 +0200 Subject: Propagate exceptions in clone calls. --- libsolidity/Compiler.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'libsolidity/Compiler.cpp') diff --git a/libsolidity/Compiler.cpp b/libsolidity/Compiler.cpp index f0d1b38e..f7bcd50c 100644 --- a/libsolidity/Compiler.cpp +++ b/libsolidity/Compiler.cpp @@ -720,6 +720,9 @@ eth::Assembly Compiler::getCloneRuntime() a << u256("0xcafecafecafecafecafecafecafecafecafecafe"); a << u256(eth::c_callGas + eth::c_callValueTransferGas + 10) << eth::Instruction::GAS << eth::Instruction::SUB; a << eth::Instruction::CALLCODE; + //Propagate error condition (if CALLCODE pushes 0 on stack). + a << eth::Instruction::ISZERO; + a.appendJumpI(a.errorTag()); //@todo adjust for larger return values, make this dynamic. a << u256(0x20) << u256(0) << eth::Instruction::RETURN; return a; -- cgit