Skip to content

Commit

Permalink
implement safer to buffer (#11159)
Browse files Browse the repository at this point in the history
  • Loading branch information
brad-decker authored May 21, 2021
1 parent ac35e7d commit 9d943dc
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 2 deletions.
16 changes: 16 additions & 0 deletions shared/modules/buffer-utils.js
Original file line number Diff line number Diff line change
@@ -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 changes: 69 additions & 0 deletions shared/modules/buffer-utils.test.js
Original file line number Diff line number Diff line change
@@ -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);
});
});
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { toBuffer } from 'ethereumjs-util';
import ConfirmTransactionBase from '../confirm-transaction-base';
import { toBuffer } from '../../../shared/modules/buffer-utils';

export default class ConfirmDeployContract extends Component {
static contextTypes = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { toBuffer } from 'ethereumjs-util';
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../shared/constants/app';
Expand Down Expand Up @@ -29,6 +28,7 @@ import {
} from '../../../shared/constants/transaction';
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 {
static contextTypes = {
Expand Down

0 comments on commit 9d943dc

Please sign in to comment.