mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Update contracts and descriptions
This commit is contained in:
		
							parent
							
								
									4737100d00
								
							
						
					
					
						commit
						058e5f0159
					
				| @ -40,9 +40,9 @@ become the richest. | ||||
| 
 | ||||
|         function becomeRichest() returns (bool) { | ||||
|             if (msg.value > mostSent) { | ||||
|                 pending[richest] = msg.value; | ||||
|                 richest = msg.sender; | ||||
|                 mostSent = msg.value; | ||||
|                 pending[richest] = msg.value; | ||||
|                 return true; | ||||
|             } | ||||
|             else { | ||||
| @ -76,9 +76,14 @@ This is as opposed to the more intuitive sending pattern. | ||||
| 
 | ||||
|         function becomeRichest() returns (bool) { | ||||
|             if (msg.value > mostSent) { | ||||
|                 // Check if call succeeds to prevent an attacker | ||||
|                 // from trapping the previous person's funds in | ||||
|                 // this contract through a callstack attack | ||||
|                 if (!richest.send(msg.value)) { | ||||
|                     throw; | ||||
|                 } | ||||
|                 richest = msg.sender; | ||||
|                 mostSent = msg.value; | ||||
|                 richest.send(msg.value); | ||||
|                 return true; | ||||
|             } | ||||
|             else { | ||||
| @ -88,8 +93,12 @@ This is as opposed to the more intuitive sending pattern. | ||||
|     } | ||||
| 
 | ||||
| Notice that, in this example, an attacker could trap the | ||||
| previous richest person's funds in the contract by causing | ||||
| the execution of `send` to fail through a callstack attack. | ||||
| contract into an unusable state by causing the ``richest`` | ||||
| to be a contract that has a fallback function which consumes | ||||
| more than the 2300 gas stipend.  That way, whenever ``send`` | ||||
| is called to deliver funds to the "poisoned" contract, it | ||||
| will cause execution to always fail because there is not | ||||
| enough gas to finish the execution of the fallback function.  | ||||
| 
 | ||||
| .. index:: access;restricting | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user