From ec15d5390f69de1d06b72c0eff9308f3cf85d8bf Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 11 Nov 2016 09:58:24 +0100 Subject: [PATCH 1/3] Limit code size (EIP170). --- libethereum/Executive.cpp | 4 +++- libevmcore/EVMSchedule.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libethereum/Executive.cpp b/libethereum/Executive.cpp index aff2592b943..a3a1436b69b 100644 --- a/libethereum/Executive.cpp +++ b/libethereum/Executive.cpp @@ -352,7 +352,9 @@ bool Executive::go(OnOpFunc const& _onOp) m_res->gasForDeposit = m_gas; m_res->depositSize = out.size(); } - if (out.size() * m_ext->evmSchedule().createDataGas <= m_gas) + if (out.size() > m_ext->evmSchedule().maxCodeSize) + BOOST_THROW_EXCEPTION(OutOfGas()); + else if (out.size() * m_ext->evmSchedule().createDataGas <= m_gas) { if (m_res) m_res->codeDeposit = CodeDeposit::Success; diff --git a/libevmcore/EVMSchedule.h b/libevmcore/EVMSchedule.h index 3ef49348460..9483a53d215 100644 --- a/libevmcore/EVMSchedule.h +++ b/libevmcore/EVMSchedule.h @@ -69,6 +69,7 @@ struct EVMSchedule unsigned extcodecopyGas = 20; unsigned balanceGas = 20; unsigned suicideGas = 0; + unsigned maxCodeSize = unsigned(-1); bool staticCallDepthLimit() const { return !eip150Mode; } bool suicideChargesNewAccountGas() const { return eip150Mode; } @@ -89,6 +90,7 @@ static const EVMSchedule EIP150Schedule = [] schedule.sloadGas = 200; schedule.callGas = 700; schedule.suicideGas = 5000; + schedule.maxCodeSize = 23999; return schedule; }(); From 0de5815ddb3ef956bde67c4f95023c353567725d Mon Sep 17 00:00:00 2001 From: chriseth Date: Fri, 11 Nov 2016 19:32:30 +0100 Subject: [PATCH 2/3] Update constant --- libevmcore/EVMSchedule.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libevmcore/EVMSchedule.h b/libevmcore/EVMSchedule.h index 9483a53d215..8fbaa50fb06 100644 --- a/libevmcore/EVMSchedule.h +++ b/libevmcore/EVMSchedule.h @@ -90,7 +90,7 @@ static const EVMSchedule EIP150Schedule = [] schedule.sloadGas = 200; schedule.callGas = 700; schedule.suicideGas = 5000; - schedule.maxCodeSize = 23999; + schedule.maxCodeSize = 0x5fff; return schedule; }(); From 75f51340b950d3d6749dbd8a858df135fd35b9f5 Mon Sep 17 00:00:00 2001 From: chriseth Date: Sun, 13 Nov 2016 10:59:05 +0100 Subject: [PATCH 3/3] Change max code size to 0x6000 --- libevmcore/EVMSchedule.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libevmcore/EVMSchedule.h b/libevmcore/EVMSchedule.h index 8fbaa50fb06..5ad14bf119c 100644 --- a/libevmcore/EVMSchedule.h +++ b/libevmcore/EVMSchedule.h @@ -90,7 +90,7 @@ static const EVMSchedule EIP150Schedule = [] schedule.sloadGas = 200; schedule.callGas = 700; schedule.suicideGas = 5000; - schedule.maxCodeSize = 0x5fff; + schedule.maxCodeSize = 0x6000; return schedule; }();