mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-10-22 11:22:43 +02:00
implement safer to buffer (#11159)
This commit is contained in:
parent
e7f8732c23
commit
b9372ba50a
16
shared/modules/buffer-utils.js
Normal file
16
shared/modules/buffer-utils.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { toBuffer as ethUtilToBuffer, isHexString } from 'ethereumjs-util';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a buffer from the provided input, via ethereumjs-util.toBuffer but
|
||||||
|
* additionally handling non hex strings. This is a failsafe as in most cases
|
||||||
|
* we should be primarily dealing with hex prefixed strings with this utility
|
||||||
|
* but we do not want to break the extension for users.
|
||||||
|
* @param {import('ethereumjs-util').ToBufferInputTypes | string} input
|
||||||
|
* @returns {Buffer}
|
||||||
|
*/
|
||||||
|
export function toBuffer(input) {
|
||||||
|
if (typeof input === 'string' && isHexString(input) === false) {
|
||||||
|
return Buffer.from(input);
|
||||||
|
}
|
||||||
|
return ethUtilToBuffer(input);
|
||||||
|
}
|
69
shared/modules/buffer-utils.test.js
Normal file
69
shared/modules/buffer-utils.test.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import { strict as assert } from 'assert';
|
||||||
|
import BN from 'bn.js';
|
||||||
|
import { toBuffer } from './buffer-utils';
|
||||||
|
|
||||||
|
describe('buffer utils', function () {
|
||||||
|
describe('toBuffer', function () {
|
||||||
|
it('should work with prefixed hex strings', function () {
|
||||||
|
const result = toBuffer('0xe');
|
||||||
|
assert.equal(result.length, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with non prefixed hex strings', function () {
|
||||||
|
const result = toBuffer('e');
|
||||||
|
assert.equal(result.length, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with weirdly 0x prefixed non-hex strings', function () {
|
||||||
|
const result = toBuffer('0xtest');
|
||||||
|
assert.equal(result.length, 6);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with regular strings', function () {
|
||||||
|
const result = toBuffer('test');
|
||||||
|
assert.equal(result.length, 4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with BN', function () {
|
||||||
|
const result = toBuffer(new BN(100));
|
||||||
|
assert.equal(result.length, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with Buffer', function () {
|
||||||
|
const result = toBuffer(Buffer.from('test'));
|
||||||
|
assert.equal(result.length, 4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with a number', function () {
|
||||||
|
const result = toBuffer(100);
|
||||||
|
assert.equal(result.length, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with null or undefined', function () {
|
||||||
|
const result = toBuffer(null);
|
||||||
|
const result2 = toBuffer(undefined);
|
||||||
|
assert.equal(result.length, 0);
|
||||||
|
assert.equal(result2.length, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with UInt8Array', function () {
|
||||||
|
const uint8 = new Uint8Array(2);
|
||||||
|
const result = toBuffer(uint8);
|
||||||
|
assert.equal(result.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with objects that have a toBuffer property', function () {
|
||||||
|
const result = toBuffer({
|
||||||
|
toBuffer: () => Buffer.from('hi'),
|
||||||
|
});
|
||||||
|
assert.equal(result.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work with objects that have a toArray property', function () {
|
||||||
|
const result = toBuffer({
|
||||||
|
toArray: () => ['hi'],
|
||||||
|
});
|
||||||
|
assert.equal(result.length, 1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -1,7 +1,7 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { toBuffer } from 'ethereumjs-util';
|
|
||||||
import ConfirmTransactionBase from '../confirm-transaction-base';
|
import ConfirmTransactionBase from '../confirm-transaction-base';
|
||||||
|
import { toBuffer } from '../../../shared/modules/buffer-utils';
|
||||||
|
|
||||||
export default class ConfirmDeployContract extends Component {
|
export default class ConfirmDeployContract extends Component {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { toBuffer } from 'ethereumjs-util';
|
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../shared/constants/app';
|
import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../../shared/constants/app';
|
||||||
@ -23,6 +22,8 @@ import {
|
|||||||
TRANSACTION_STATUSES,
|
TRANSACTION_STATUSES,
|
||||||
} from '../../../../shared/constants/transaction';
|
} from '../../../../shared/constants/transaction';
|
||||||
import { getTransactionTypeTitle } from '../../helpers/utils/transactions.util';
|
import { getTransactionTypeTitle } from '../../helpers/utils/transactions.util';
|
||||||
|
import ErrorMessage from '../../components/ui/error-message';
|
||||||
|
import { toBuffer } from '../../../../shared/modules/buffer-utils';
|
||||||
|
|
||||||
export default class ConfirmTransactionBase extends Component {
|
export default class ConfirmTransactionBase extends Component {
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
|
Loading…
Reference in New Issue
Block a user