From e4d75c77bf9f3eba966be2269727032e7ca9abf0 Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Wed, 4 Dec 2019 14:40:32 -0500 Subject: [PATCH] Sanitize whitespace in seed phrase input (#7260) * Sanitize whitespace in seed phrase input * cargo clippy * Use split_whitespace --- clap-utils/src/keypair.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/clap-utils/src/keypair.rs b/clap-utils/src/keypair.rs index e149ca3df5..d18aab20f6 100644 --- a/clap-utils/src/keypair.rs +++ b/clap-utils/src/keypair.rs @@ -69,7 +69,8 @@ pub fn keypair_from_seed_phrase( let passphrase = prompt_passphrase(&passphrase_prompt)?; keypair_from_seed_phrase_and_passphrase(&seed_phrase, &passphrase) } else { - let mnemonic = Mnemonic::from_phrase(seed_phrase, Language::English)?; + let sanitized = sanitize_seed_phrase(seed_phrase); + let mnemonic = Mnemonic::from_phrase(sanitized, Language::English)?; let passphrase = prompt_passphrase(&passphrase_prompt)?; let seed = Seed::new(&mnemonic, &passphrase); keypair_from_seed(seed.as_bytes()) @@ -112,6 +113,13 @@ pub fn keypair_input( } } +fn sanitize_seed_phrase(seed_phrase: &str) -> String { + seed_phrase + .split_whitespace() + .collect::>() + .join(" ") +} + #[cfg(test)] mod tests { use super::*; @@ -123,4 +131,13 @@ mod tests { let KeypairWithSource { source, .. } = keypair_input(&arg_matches, "").unwrap(); assert_eq!(source, Source::Generated); } + + #[test] + fn test_sanitize_seed_phrase() { + let seed_phrase = " Mary had\ta\u{2009}little \n\t lamb"; + assert_eq!( + "Mary had a little lamb".to_owned(), + sanitize_seed_phrase(seed_phrase) + ); + } }