Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit f640061

Browse files
dacarleyfrozeman
authored andcommitted
Fix for Bug #1123 (#1135)
* Fix for Bug #1123 * Trigger travis * Removed a bogus test for `bytes64`
1 parent 006b394 commit f640061

File tree

3 files changed

+112
-4
lines changed

3 files changed

+112
-4
lines changed

packages/web3-eth-abi/src/formatters.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ var formatInputBytes = function (value) {
6262
throw new Error('Given parameter bytes has an invalid length: "'+ value + '"');
6363
}
6464

65+
if (result.length > 64) {
66+
throw new Error('Given parameter bytes is too long: "' + value + '"');
67+
}
68+
6569
var l = Math.floor((result.length + 63) / 64);
6670
result = utils.padRight(result, l * 64);
6771
return new SolidityParam(result);

test/abi.encodeParameter.js

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/contract.encodeABI.js

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
var chai = require('chai');
2+
var assert = chai.assert;
3+
var Eth = require('../packages/web3-eth');
4+
var sha3 = require('../packages/web3-utils').sha3;
5+
var FakeIpcProvider = require('./helpers/FakeIpcProvider');
6+
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
7+
var Promise = require('bluebird');
8+
9+
var abi = [
10+
{
11+
constant: true,
12+
inputs: [
13+
{
14+
name: "a",
15+
type: "bytes32"
16+
},
17+
{
18+
name: "b",
19+
type: "bytes32"
20+
}
21+
],
22+
name: "takesTwoBytes32",
23+
outputs: [
24+
{
25+
name: "",
26+
type: "bytes32"
27+
}
28+
],
29+
payable: false,
30+
type: "function",
31+
stateMutability: "view"
32+
}
33+
];
34+
35+
describe('contract', function () {
36+
describe('method.encodeABI', function () {
37+
it('should handle bytes32 arrays that only contain 1 byte', function () {
38+
var provider = new FakeIpcProvider();
39+
var eth = new Eth(provider);
40+
41+
var contract = new eth.Contract(abi);
42+
43+
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(2)), '0x'.concat('b'.repeat(2))).encodeABI();
44+
45+
assert.equal(result, [
46+
'0x1323517e',
47+
'aa00000000000000000000000000000000000000000000000000000000000000',
48+
'bb00000000000000000000000000000000000000000000000000000000000000'
49+
].join(''));
50+
});
51+
52+
it('should handle bytes32 arrays that are short 1 byte', function () {
53+
var provider = new FakeIpcProvider();
54+
var eth = new Eth(provider);
55+
56+
var contract = new eth.Contract(abi);
57+
58+
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(62)), '0x'.concat('b'.repeat(62))).encodeABI();
59+
60+
assert.equal(result, [
61+
'0x1323517e',
62+
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa00',
63+
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00'
64+
].join(''));
65+
});
66+
67+
it('should throw an exception on bytes32 arrays that have an invalid length', function () {
68+
var provider = new FakeIpcProvider();
69+
var eth = new Eth(provider);
70+
71+
var contract = new eth.Contract(abi);
72+
73+
var test = function () {
74+
contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(63)), '0x'.concat('b'.repeat(63))).encodeABI();
75+
}
76+
77+
assert.throws(test, 'Given parameter bytes has an invalid length: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
78+
});
79+
80+
it('should handle bytes32 arrays that are full', function () {
81+
var provider = new FakeIpcProvider();
82+
var eth = new Eth(provider);
83+
84+
var contract = new eth.Contract(abi);
85+
86+
var result = contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(64)), '0x'.concat('b'.repeat(64))).encodeABI();
87+
88+
assert.equal(result, [
89+
'0x1323517e',
90+
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
91+
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
92+
].join(''));
93+
});
94+
95+
it('should throw an exception on bytes32 arrays that are too long', function () {
96+
var provider = new FakeIpcProvider();
97+
var eth = new Eth(provider);
98+
99+
var contract = new eth.Contract(abi);
100+
101+
var test = function() {
102+
contract.methods.takesTwoBytes32('0x'.concat('a'.repeat(66)), '0x'.concat('b'.repeat(66))).encodeABI();
103+
}
104+
105+
assert.throws(test, 'Given parameter bytes is too long: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"');
106+
});
107+
});
108+
});

0 commit comments

Comments
 (0)