Skip to content

Commit

Permalink
Handle invalid strings during seed phrase import (#6743)
Browse files Browse the repository at this point in the history
* Add tests for ImportWithSeedPhrase#parseSeedPhrase

* Handle importing whitespace-only seed phrases

Fixes #6694

This changeset fixes our parsing of seed phrases during import to handle the
case where a user tries to import a seed phrase that consists solely of whitespace.
We no longer produce an error and instead treat it as an incorrect seed phrase.

* Handle importing more invalid seed phrases
  • Loading branch information
whymarrh authored Jun 27, 2019
1 parent a6bfc6f commit d566543
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,21 @@ export default class ImportWithSeedPhrase extends PureComponent {
}

parseSeedPhrase = (seedPhrase) => {
return seedPhrase
.trim()
.match(/\w+/g)
.join(' ')
if (!seedPhrase) {
return ''
}

const trimmed = seedPhrase.trim()
if (!trimmed) {
return ''
}

const words = trimmed.match(/\w+/g)
if (!words) {
return ''
}

return words.join(' ')
}

componentWillMount () {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import React from 'react'
import assert from 'assert'
import { shallow } from 'enzyme'
import sinon from 'sinon'
import ImportWithSeedPhrase from '../import-with-seed-phrase.component'

function shallowRender (props = {}, context = {}) {
return shallow(<ImportWithSeedPhrase {...props} />, {
context: {
t: str => str + '_t',
metricsEvent: sinon.spy(),
...context,
},
})
}

describe('ImportWithSeedPhrase Component', () => {
it('should render without error', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})
const textareaCount = root.find('.first-time-flow__textarea').length
assert.equal(textareaCount, 1, 'should render 12 seed phrases')
})

describe('parseSeedPhrase', () => {
it('should handle a regular seed phrase', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})

const {parseSeedPhrase} = root.instance()

assert.deepEqual(parseSeedPhrase('foo bar baz'), 'foo bar baz')
})

it('should trim extraneous whitespace from the given seed phrase', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})

const {parseSeedPhrase} = root.instance()

assert.deepEqual(parseSeedPhrase(' foo bar baz '), 'foo bar baz')
})

it('should return an empty string when given a whitespace-only string', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})

const {parseSeedPhrase} = root.instance()

assert.deepEqual(parseSeedPhrase(' '), '')
})

it('should return an empty string when given a string with only symbols', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})

const {parseSeedPhrase} = root.instance()

assert.deepEqual(parseSeedPhrase('$'), '')
})

it('should return an empty string for both null and undefined', () => {
const root = shallowRender({
onSubmit: sinon.spy(),
})

const {parseSeedPhrase} = root.instance()

assert.deepEqual(parseSeedPhrase(undefined), '')
assert.deepEqual(parseSeedPhrase(null), '')
})
})
})

0 comments on commit d566543

Please sign in to comment.