CLI: Make derived address seed.len() check a clap validator

This commit is contained in:
Trent Nelson 2021-02-18 00:07:14 -07:00 committed by mergify[bot]
parent 84e7ba0b3f
commit 16e0a4b412
2 changed files with 18 additions and 8 deletions

View File

@ -3,7 +3,7 @@ use chrono::DateTime;
use solana_sdk::{
clock::{Epoch, Slot},
hash::Hash,
pubkey::Pubkey,
pubkey::{Pubkey, MAX_SEED_LEN},
signature::{read_keypair_file, Signature},
};
use std::fmt::Display;
@ -291,6 +291,21 @@ where
.map(|_| ())
}
pub fn is_derived_address_seed<T>(value: T) -> Result<(), String>
where
T: AsRef<str> + Display,
{
let value = value.as_ref();
if value.len() > MAX_SEED_LEN {
Err(format!(
"Address seed must not be longer than {} bytes",
MAX_SEED_LEN
))
} else {
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;

View File

@ -40,7 +40,7 @@ use solana_sdk::{
hash::Hash,
instruction::InstructionError,
message::Message,
pubkey::{Pubkey, MAX_SEED_LEN},
pubkey::Pubkey,
signature::{Signature, Signer, SignerError},
system_instruction::{self, SystemError},
system_program,
@ -923,12 +923,6 @@ pub fn parse_create_address_with_seed(
let seed = matches.value_of("seed").unwrap().to_string();
if seed.len() > MAX_SEED_LEN {
return Err(CliError::BadParameter(
"Address seed must not be longer than 32 bytes".to_string(),
));
}
Ok(CliCommandInfo {
command: CliCommand::CreateAddressWithSeed {
from_pubkey,
@ -1971,6 +1965,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
.value_name("SEED_STRING")
.takes_value(true)
.required(true)
.validator(is_derived_address_seed)
.help("The seed. Must not take more than 32 bytes to encode as utf-8"),
)
.arg(