Skip to content

Commit

Permalink
Fix for Bug #1123 (#1135)
Browse files Browse the repository at this point in the history
* Fix for Bug #1123

* Trigger travis

* Removed a bogus test for `bytes64`
  • Loading branch information
dacarley authored and frozeman committed Oct 24, 2017
1 parent 006b394 commit f640061
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 4 deletions.
4 changes: 4 additions & 0 deletions packages/web3-eth-abi/src/formatters.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ var formatInputBytes = function (value) {
throw new Error('Given parameter bytes has an invalid length: "'+ value + '"');
}

if (result.length > 64) {
throw new Error('Given parameter bytes is too long: "' + value + '"');
}

var l = Math.floor((result.length + 63) / 64);
result = utils.padRight(result, l * 64);
return new SolidityParam(result);
Expand Down
4 changes: 0 additions & 4 deletions test/abi.encodeParameter.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

108 changes: 108 additions & 0 deletions test/contract.encodeABI.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
var chai = require('chai');
var assert = chai.assert;
var Eth = require('../packages/web3-eth');
var sha3 = require('../packages/web3-utils').sha3;
var FakeIpcProvider = require('./helpers/FakeIpcProvider');
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
var Promise = require('bluebird');

var abi = [
{
constant: true,
inputs: [
{
name: "a",
type: "bytes32"
},
{
name: "b",
type: "bytes32"
}
],
name: "takesTwoBytes32",
outputs: [
{
name: "",
type: "bytes32"
}
],
payable: false,
type: "function",
stateMutability: "view"
}
];

describe('contract', function () {
describe('method.encodeABI', function () {
it('should handle bytes32 arrays that only contain 1 byte', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);

var contract = new eth.Contract(abi);

var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(2)), '0x'.concat('b'.repeat(2))).encodeABI();

assert.equal(result, [
'0x1323517e',
'aa00000000000000000000000000000000000000000000000000000000000000',
'bb00000000000000000000000000000000000000000000000000000000000000'
].join(''));
});

it('should handle bytes32 arrays that are short 1 byte', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);

var contract = new eth.Contract(abi);

var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(62)), '0x'.concat('b'.repeat(62))).encodeABI();

assert.equal(result, [
'0x1323517e',
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00',
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00'
].join(''));
});

it('should throw an exception on bytes32 arrays that have an invalid length', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);

var contract = new eth.Contract(abi);

var test = function () {
contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(63)), '0x'.concat('b'.repeat(63))).encodeABI();
}

assert.throws(test, 'Given parameter bytes has an invalid length: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
});

it('should handle bytes32 arrays that are full', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);

var contract = new eth.Contract(abi);

var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(64)), '0x'.concat('b'.repeat(64))).encodeABI();

assert.equal(result, [
'0x1323517e',
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
].join(''));
});

it('should throw an exception on bytes32 arrays that are too long', function () {
var provider = new FakeIpcProvider();
var eth = new Eth(provider);

var contract = new eth.Contract(abi);

var test = function() {
contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(66)), '0x'.concat('b'.repeat(66))).encodeABI();
}

assert.throws(test, 'Given parameter bytes is too long: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
});
});
});

0 comments on commit f640061

Please sign in to comment.