@@ -527,8 +527,14 @@ fn parse_tr_tree(s: &str) -> Result<expression::Tree, Error> {
527
527
if s. len ( ) > 3 && & s[ ..3 ] == "tr(" && s. as_bytes ( ) [ s. len ( ) - 1 ] == b')' {
528
528
let rest = & s[ 3 ..s. len ( ) - 1 ] ;
529
529
if !rest. contains ( ',' ) {
530
+ let key = expression:: Tree :: from_str ( rest) ?;
531
+ if !key. args . is_empty ( ) {
532
+ return Err ( Error :: Unexpected (
533
+ "invalid taproot internal key" . to_string ( ) ,
534
+ ) ) ;
535
+ }
530
536
let internal_key = expression:: Tree {
531
- name : rest ,
537
+ name : key . name ,
532
538
args : vec ! [ ] ,
533
539
} ;
534
540
return Ok ( expression:: Tree {
@@ -540,8 +546,14 @@ fn parse_tr_tree(s: &str) -> Result<expression::Tree, Error> {
540
546
let ( key, script) = split_once ( rest, ',' )
541
547
. ok_or_else ( || Error :: BadDescriptor ( "invalid taproot descriptor" . to_string ( ) ) ) ?;
542
548
549
+ let key = expression:: Tree :: from_str ( key) ?;
550
+ if !key. args . is_empty ( ) {
551
+ return Err ( Error :: Unexpected (
552
+ "invalid taproot internal key" . to_string ( ) ,
553
+ ) ) ;
554
+ }
543
555
let internal_key = expression:: Tree {
544
- name : key,
556
+ name : key. name ,
545
557
args : vec ! [ ] ,
546
558
} ;
547
559
if script. is_empty ( ) {
@@ -568,19 +580,13 @@ fn split_once(inp: &str, delim: char) -> Option<(&str, &str)> {
568
580
if inp. is_empty ( ) {
569
581
None
570
582
} else {
571
- let mut found = inp. len ( ) ;
572
- for ( idx, ch) in inp. chars ( ) . enumerate ( ) {
573
- if ch == delim {
574
- found = idx;
575
- break ;
576
- }
577
- }
578
- // No comma or trailing comma found
579
- if found >= inp. len ( ) - 1 {
580
- Some ( ( inp, "" ) )
581
- } else {
582
- Some ( ( & inp[ ..found] , & inp[ found + 1 ..] ) )
583
- }
583
+ // find the first character that matches delim
584
+ let res = inp
585
+ . chars ( )
586
+ . position ( |ch| ch == delim)
587
+ . map ( |idx| ( & inp[ ..idx] , & inp[ idx + 1 ..] ) )
588
+ . unwrap_or ( ( inp, "" ) ) ;
589
+ Some ( res)
584
590
}
585
591
}
586
592
0 commit comments