From b5c17d70580c050c8ed1d4bf5bb8cefbae443bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remo=20F=C3=BCrst?= Date: Wed, 8 Mar 2017 22:45:27 +0100 Subject: Fix delegation loop in Ballot example contract fixes #1753 --- docs/solidity-by-example.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'docs/solidity-by-example.rst') diff --git a/docs/solidity-by-example.rst b/docs/solidity-by-example.rst index 915cfa76..7e08c6b4 100644 --- a/docs/solidity-by-example.rst +++ b/docs/solidity-by-example.rst @@ -106,6 +106,10 @@ of votes. if (sender.voted) throw; + // Self-delegation is not allowed. + if (to == msg.sender) + throw; + // Forward the delegation as long as // `to` also delegated. // In general, such loops are very dangerous, @@ -114,16 +118,12 @@ of votes. // In this case, the delegation will not be executed, // but in other situations, such loops might // cause a contract to get "stuck" completely. - while ( - voters[to].delegate != address(0) && - voters[to].delegate != msg.sender - ) { + while (voters[to].delegate != address(0)) { to = voters[to].delegate; - } - // We found a loop in the delegation, not allowed. - if (to == msg.sender) { - throw; + // We found a loop in the delegation, not allowed. + if (to == msg.sender) + throw; } // Since `sender` is a reference, this -- cgit v1.2.3