Pārlūkot izejas kodu

Merge pull request #415 from frangio/merge-411-manually

Check that destination of token transfers is not 0x0
Francisco Giordano 8 gadi atpakaļ
vecāks
revīzija
5636575327

+ 2 - 0
contracts/token/BasicToken.sol

@@ -20,6 +20,8 @@ contract BasicToken is ERC20Basic {
   * @param _value The amount to be transferred.
   */
   function transfer(address _to, uint256 _value) returns (bool) {
+    require(_to != address(0));
+
     balances[msg.sender] = balances[msg.sender].sub(_value);
     balances[_to] = balances[_to].add(_value);
     Transfer(msg.sender, _to, _value);

+ 2 - 0
contracts/token/StandardToken.sol

@@ -24,6 +24,8 @@ contract StandardToken is ERC20, BasicToken {
    * @param _value uint256 the amount of tokens to be transferred
    */
   function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
+    require(_to != address(0));
+
     var _allowance = allowed[_from][msg.sender];
 
     // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met

+ 11 - 1
test/BasicToken.js

@@ -22,7 +22,7 @@ contract('BasicToken', function(accounts) {
     assert.equal(secondAccountBalance, 100);
   });
 
-  it("should throw an error when trying to transfer more than balance", async function() {
+  it('should throw an error when trying to transfer more than balance', async function() {
     let token = await BasicTokenMock.new(accounts[0], 100);
     try {
       let transfer = await token.transfer(accounts[1], 101);
@@ -32,4 +32,14 @@ contract('BasicToken', function(accounts) {
     }    
   });
 
+  it('should throw an error when trying to transfer to 0x0', async function() {
+    let token = await BasicTokenMock.new(accounts[0], 100);
+    try {
+      let transfer = await token.transfer(0x0, 100);
+      assert.fail('should have thrown before');
+    } catch(error) {
+      assertJump(error);
+    }
+  });
+
 });

+ 21 - 0
test/StandardToken.js

@@ -88,4 +88,25 @@ contract('StandardToken', function(accounts) {
     })
   });
 
+  it('should throw an error when trying to transfer to 0x0', async function() {
+    let token = await StandardTokenMock.new(accounts[0], 100);
+    try {
+      let transfer = await token.transfer(0x0, 100);
+      assert.fail('should have thrown before');
+    } catch(error) {
+      assertJump(error);
+    }
+  });
+
+  it('should throw an error when trying to transferFrom to 0x0', async function() {
+    let token = await StandardTokenMock.new(accounts[0], 100);
+    await token.approve(accounts[1], 100);
+    try {
+      let transfer = await token.transferFrom(accounts[0], 0x0, 100, {from: accounts[1]});
+      assert.fail('should have thrown before');
+    } catch(error) {
+      assertJump(error);
+    }
+  });
+
 });