Strip off newline chars from password (#1199)
* strips off newline chars from password * adds changes suggested in author review
This commit is contained in:
		
							parent
							
								
									ea4a52984c
								
							
						
					
					
						commit
						6383c95f8b
					
				| @ -37,3 +37,57 @@ pub fn base_wallet_dir(matches: &ArgMatches, arg: &'static str) -> Result<PathBu | |||||||
|         PathBuf::new().join(".lighthouse").join("wallets"), |         PathBuf::new().join(".lighthouse").join("wallets"), | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | /// Remove any number of newline or carriage returns from the end of a vector of bytes.
 | ||||||
|  | pub fn strip_off_newlines(mut bytes: Vec<u8>) -> Vec<u8> { | ||||||
|  |     let mut strip_off = 0; | ||||||
|  |     for (i, byte) in bytes.iter().rev().enumerate() { | ||||||
|  |         if *byte == b'\n' || *byte == b'\r' { | ||||||
|  |             strip_off = i + 1; | ||||||
|  |         } else { | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     bytes.truncate(bytes.len() - strip_off); | ||||||
|  | 
 | ||||||
|  |     bytes.to_vec() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod test { | ||||||
|  |     use super::strip_off_newlines; | ||||||
|  | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn test_strip_off() { | ||||||
|  |         let expected = "hello world".as_bytes().to_vec(); | ||||||
|  | 
 | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\n".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\n\n\n\n".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\r".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\r\r\r\r\r".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\r\n".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world\r\n\r\n".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |         assert_eq!( | ||||||
|  |             strip_off_newlines("hello world".as_bytes().to_vec()), | ||||||
|  |             expected | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
| @ -1,4 +1,7 @@ | |||||||
| use crate::{common::random_password, BASE_DIR_FLAG}; | use crate::{ | ||||||
|  |     common::{random_password, strip_off_newlines}, | ||||||
|  |     BASE_DIR_FLAG, | ||||||
|  | }; | ||||||
| use clap::{App, Arg, ArgMatches}; | use clap::{App, Arg, ArgMatches}; | ||||||
| use eth2_wallet::{ | use eth2_wallet::{ | ||||||
|     bip39::{Language, Mnemonic, MnemonicType}, |     bip39::{Language, Mnemonic, MnemonicType}, | ||||||
| @ -104,7 +107,10 @@ pub fn cli_run(matches: &ArgMatches, base_dir: PathBuf) -> Result<(), String> { | |||||||
| 
 | 
 | ||||||
|     let wallet_password = fs::read(&wallet_password_path) |     let wallet_password = fs::read(&wallet_password_path) | ||||||
|         .map_err(|e| format!("Unable to read {:?}: {:?}", wallet_password_path, e)) |         .map_err(|e| format!("Unable to read {:?}: {:?}", wallet_password_path, e)) | ||||||
|         .map(|bytes| PlainText::from(bytes))?; |         .map(|bytes| { | ||||||
|  |             let bytes = strip_off_newlines(bytes); | ||||||
|  |             PlainText::from(bytes) | ||||||
|  |         })?; | ||||||
| 
 | 
 | ||||||
|     let wallet = mgr |     let wallet = mgr | ||||||
|         .create_wallet(name, wallet_type, &mnemonic, wallet_password.as_bytes()) |         .create_wallet(name, wallet_type, &mnemonic, wallet_password.as_bytes()) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user