Skip to content

Commit e0af5b7

Browse files
committed
Don't enforce strict cannonical wrappers
1 parent 7d33643 commit e0af5b7

File tree

4 files changed

+8
-59
lines changed

4 files changed

+8
-59
lines changed

fuzz/fuzz_targets/roundtrip_descriptor.rs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,10 @@ use std::str::FromStr;
88
fn do_test(data: &[u8]) {
99
let s = String::from_utf8_lossy(data);
1010
if let Ok(desc) = Descriptor::<DummyKey>::from_str(&s) {
11-
let output = desc.to_string();
11+
let str2 = desc.to_string();
12+
let desc2 = Descriptor::<DummyKey>::from_str(&str2).unwrap();
1213

13-
let multi_wrap_pk_re = Regex::new("([a-z]+)c:pk_k\\(").unwrap();
14-
let multi_wrap_pkh_re = Regex::new("([a-z]+)c:pk_h\\(").unwrap();
15-
16-
let normalize_aliases = multi_wrap_pk_re.replace_all(&s, "$1:pk(");
17-
let normalize_aliases = multi_wrap_pkh_re.replace_all(&normalize_aliases, "$1:pkh(");
18-
let normalize_aliases = normalize_aliases
19-
.replace("c:pk_k(", "pk(")
20-
.replace("c:pk_h(", "pkh(");
21-
22-
let mut checksum_split = output.split('#');
23-
let pre_checksum = checksum_split.next().unwrap();
24-
assert!(checksum_split.next().is_some());
25-
assert!(checksum_split.next().is_none());
26-
27-
if normalize_aliases.len() == output.len() {
28-
let len = pre_checksum.len();
29-
assert_eq!(normalize_aliases[..len].to_lowercase(), pre_checksum.to_lowercase());
30-
} else {
31-
assert_eq!(normalize_aliases.to_lowercase(), pre_checksum.to_lowercase());
32-
}
14+
assert_eq!(desc, desc2);
3315
}
3416
}
3517

@@ -62,4 +44,3 @@ mod tests {
6244
do_test(b"pkh()");
6345
}
6446
}
65-

fuzz/fuzz_targets/roundtrip_miniscript_str.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,10 @@ use miniscript::Segwitv0;
1111
fn do_test(data: &[u8]) {
1212
let s = String::from_utf8_lossy(data);
1313
if let Ok(desc) = Miniscript::<DummyKey, Segwitv0>::from_str(&s) {
14-
let output = desc.to_string();
14+
let str2 = desc.to_string();
15+
let desc2 = Miniscript::<DummyKey, Segwitv0>::from_str(&str2).unwrap();
1516

16-
let multi_wrap_pk_re = Regex::new("([a-z]+)c:pk_k\\(").unwrap();
17-
let multi_wrap_pkh_re = Regex::new("([a-z]+)c:pk_h\\(").unwrap();
18-
19-
let normalize_aliases = multi_wrap_pk_re.replace_all(&s, "$1:pk(");
20-
let normalize_aliases = multi_wrap_pkh_re.replace_all(&normalize_aliases, "$1:pkh(");
21-
let normalize_aliases = normalize_aliases
22-
.replace("c:pk_k(", "pk(")
23-
.replace("c:pk_h(", "pkh(");
24-
25-
assert_eq!(normalize_aliases.to_lowercase(), output.to_lowercase());
17+
assert_eq!(desc, desc2);
2618
}
2719
}
2820

src/lib.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,6 @@ pub enum Error {
469469
MultiAt(String),
470470
/// Name of a fragment contained `@` but we were not parsing an OR
471471
AtOutsideOr(String),
472-
/// Fragment was an `and_v(_, true)` which should be written as `t:`
473-
NonCanonicalTrue,
474-
/// Fragment was an `or_i(_, false)` or `or_i(false,_)` which should be written as `u:` or `l:`
475-
NonCanonicalFalse,
476472
/// Encountered a `l:0` which is syntactically equal to `u:0` except stupid
477473
LikelyFalse,
478474
/// Encountered a wrapping character that we don't recognize
@@ -595,10 +591,6 @@ impl fmt::Display for Error {
595591
Error::MultiColon(ref s) => write!(f, "«{}» has multiple instances of «:»", s),
596592
Error::MultiAt(ref s) => write!(f, "«{}» has multiple instances of «@»", s),
597593
Error::AtOutsideOr(ref s) => write!(f, "«{}» contains «@» in non-or() context", s),
598-
Error::NonCanonicalTrue => f.write_str("Use «t:X» rather than «and_v(X,true())»"),
599-
Error::NonCanonicalFalse => {
600-
f.write_str("Use «u:X» «l:X» rather than «or_i(X,false)» «or_i(false,X)»")
601-
}
602594
Error::LikelyFalse => write!(f, "0 is not very likely (use «u:0»)"),
603595
Error::UnknownWrapper(ch) => write!(f, "unknown wrapper «{}:»", ch),
604596
Error::NonTopLevel(ref s) => write!(f, "non-T miniscript: {}", s),

src/miniscript/astelem.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -503,15 +503,7 @@ where
503503
}),
504504
("1", 0) => Ok(Terminal::True),
505505
("0", 0) => Ok(Terminal::False),
506-
("and_v", 2) => {
507-
let expr = expression::binary(top, Terminal::AndV)?;
508-
if let Terminal::AndV(_, ref right) = expr {
509-
if let Terminal::True = right.node {
510-
return Err(Error::NonCanonicalTrue);
511-
}
512-
}
513-
Ok(expr)
514-
}
506+
("and_v", 2) => expression::binary(top, Terminal::AndV),
515507
("and_b", 2) => expression::binary(top, Terminal::AndB),
516508
("and_n", 2) => Ok(Terminal::AndOr(
517509
expression::FromTree::from_tree(&top.args[0])?,
@@ -526,15 +518,7 @@ where
526518
("or_b", 2) => expression::binary(top, Terminal::OrB),
527519
("or_d", 2) => expression::binary(top, Terminal::OrD),
528520
("or_c", 2) => expression::binary(top, Terminal::OrC),
529-
("or_i", 2) => {
530-
let expr = expression::binary(top, Terminal::OrI)?;
531-
if let Terminal::OrI(ref left, ref right) = expr {
532-
if left.node == Terminal::False || right.node == Terminal::False {
533-
return Err(Error::NonCanonicalFalse);
534-
}
535-
}
536-
Ok(expr)
537-
}
521+
("or_i", 2) => expression::binary(top, Terminal::OrI),
538522
("thresh", n) => {
539523
if n == 0 {
540524
return Err(errstr("no arguments given"));

0 commit comments

Comments
 (0)