Fixed out-of-safe-range hexlify values to throw an exception (#420).
This commit is contained in:
parent
9785eed8dd
commit
41c2c8a729
@ -168,6 +168,15 @@ export function hexlify(value: Arrayish | Hexable | number): string {
|
|||||||
errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
|
errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @TODO: Roll this into the above error as a numeric fault (overflow); next version, not backward compatible
|
||||||
|
// We can about (value == MAX_INT) to as well, since that may indicate we underflowed already
|
||||||
|
if (value >= 9007199254740991) {
|
||||||
|
errors.throwError("out-of-range", errors.NUMERIC_FAULT, {
|
||||||
|
operartion: "hexlify",
|
||||||
|
fault: "out-of-safe-range"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var hex = '';
|
var hex = '';
|
||||||
while (value) {
|
while (value) {
|
||||||
hex = HexCharacters[value & 0x0f] + hex;
|
hex = HexCharacters[value & 0x0f] + hex;
|
||||||
|
@ -348,3 +348,20 @@ describe('Test BigNumber', function() {
|
|||||||
].forEach(testAbs);
|
].forEach(testAbs);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("Hexlify", function() {
|
||||||
|
it("hexlify on string of unsafe number", function() {
|
||||||
|
assert(ethers.utils.hexlify(ethers.utils.bigNumberify("9985956830000000000")), "0x8a953ed43a892c00", "hexlify on large BigNumber");
|
||||||
|
});
|
||||||
|
|
||||||
|
[9007199254740991, 9985956830000000000].forEach((value) => {
|
||||||
|
it('hexlify fails on unsafe number - ' + value, function() {
|
||||||
|
assert.throws(function() {
|
||||||
|
var result = ethers.utils.hexlify(value);
|
||||||
|
console.log('Result', result);
|
||||||
|
}, function(error) {
|
||||||
|
return (error.code === "NUMERIC_FAULT" && error.fault === "out-of-safe-range");
|
||||||
|
}, "hexlify throws on out-of-range value - " + value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user