File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -5,11 +5,13 @@ use std::path::Path;
55
66/// Mask an API key for safe display.
77pub fn safe_format_key ( key : & str ) -> String {
8- if key. len ( ) <= 13 {
8+ let char_count = key. chars ( ) . count ( ) ;
9+ if char_count <= 13 {
910 return "***" . to_string ( ) ;
1011 }
11- let prefix = & key[ ..8 ] ;
12- let suffix = & key[ key. len ( ) - 5 ..] ;
12+
13+ let prefix: String = key. chars ( ) . take ( 8 ) . collect ( ) ;
14+ let suffix: String = key. chars ( ) . skip ( char_count - 5 ) . collect ( ) ;
1315 format ! ( "{prefix}***{suffix}" )
1416}
1517
@@ -46,4 +48,16 @@ mod tests {
4648 let key = "sk-proj-12345" ;
4749 assert_eq ! ( safe_format_key( key) , "***" ) ;
4850 }
51+
52+ #[ test]
53+ fn test_safe_format_key_non_ascii_boundary ( ) {
54+ let key = "aaaaaaaéaaaaa" ;
55+ assert_eq ! ( safe_format_key( key) , "***" ) ;
56+ }
57+
58+ #[ test]
59+ fn test_safe_format_key_long_non_ascii ( ) {
60+ let key = "sk-proj-ééééééé-token" ;
61+ assert_eq ! ( safe_format_key( key) , "sk-proj-***token" ) ;
62+ }
4963}
You can’t perform that action at this time.
0 commit comments