diff --git a/src/lib.rs b/src/lib.rs index 968114e94..26e868cc2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -333,7 +333,7 @@ pub enum Error { IncorrectScriptHash, /// Recursion depth exceeded when parsing policy/miniscript from string MaxRecursiveDepthExceeded, - /// Recursion depth exceeded when parsing policy/miniscript from string + /// Script size too large ScriptSizeTooLarge, } diff --git a/src/miniscript/lex.rs b/src/miniscript/lex.rs index 152b31404..bf4a12011 100644 --- a/src/miniscript/lex.rs +++ b/src/miniscript/lex.rs @@ -224,7 +224,7 @@ pub fn lex(script: &script::Script) -> Result, Error> { x.copy_from_slice(bytes); ret.push(Token::Hash32(x)) } - 33 => { + 33 | 65 => { ret.push(Token::Pubkey( PublicKey::from_slice(bytes).map_err(Error::BadPubkey)?, )); diff --git a/src/miniscript/mod.rs b/src/miniscript/mod.rs index eed4bfcb8..3be192499 100644 --- a/src/miniscript/mod.rs +++ b/src/miniscript/mod.rs @@ -129,7 +129,9 @@ impl Miniscript { /// Attempt to parse a script into a Miniscript representation pub fn parse(script: &script::Script) -> Result, Error> { // Transactions more than 100Kb are non-standard - if script.len() > 10000 {} + if script.len() > 100_000 { + return Err(Error::ScriptSizeTooLarge); + } let tokens = lex(script)?; let mut iter = TokenIter::new(tokens);