File tree Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -1408,6 +1408,23 @@ mod tests {
1408
1408
ms. translate_pk ( & mut t) . unwrap_err ( ) ;
1409
1409
}
1410
1410
1411
+ #[ test]
1412
+ fn duplicate_keys ( ) {
1413
+ // You cannot parse a Miniscript that has duplicate keys
1414
+ let err = Miniscript :: < String , Segwitv0 > :: from_str ( "and_v(v:pk(A),pk(A))" ) . unwrap_err ( ) ;
1415
+ assert_eq ! ( err, Error :: AnalysisError ( crate :: AnalysisError :: RepeatedPubkeys ) ) ;
1416
+
1417
+ // ...though you can parse one with from_str_insane
1418
+ let ok_insane =
1419
+ Miniscript :: < String , Segwitv0 > :: from_str_insane ( "and_v(v:pk(A),pk(A))" ) . unwrap ( ) ;
1420
+ // ...but this cannot be sanity checked.
1421
+ assert_eq ! ( ok_insane. sanity_check( ) . unwrap_err( ) , crate :: AnalysisError :: RepeatedPubkeys ) ;
1422
+ // ...it can be lifted, though it's unclear whether this is a deliberate
1423
+ // choice or just an accident. It seems weird given that duplicate public
1424
+ // keys are forbidden in several other places.
1425
+ ok_insane. lift ( ) . unwrap ( ) ;
1426
+ }
1427
+
1411
1428
#[ test]
1412
1429
fn mixed_timelocks ( ) {
1413
1430
// You cannot parse a Miniscript that mixes timelocks.
You can’t perform that action at this time.
0 commit comments