@@ -15,65 +15,63 @@ use unicode_normalization::{
15
15
UnicodeNormalization ,
16
16
} ;
17
17
18
- fuzz_target ! ( |data: & [ u8 ] | {
19
- let mut data = data;
20
- let c = if let Some ( ( char_value, remaining_data) ) = data. split_first( ) {
21
- match std:: char :: from_u32( * char_value as u32 ) {
22
- Some ( ch) => {
23
- data = remaining_data;
24
- ch
25
- }
26
- None => return ,
27
- }
28
- } else {
29
- return ;
30
- } ;
18
+ fuzz_target ! ( |data: ( u8 , String ) | {
19
+ let ( function_index, string_data) = data;
31
20
32
- // Generate second character for fuzzing if data is enough
33
- let c2 = if let Some ( ( char_value, remaining_data) ) = data. split_first( ) {
34
- data = remaining_data;
35
- std:: char :: from_u32( * char_value as u32 )
36
- } else {
37
- None
38
- } ;
39
- let string_data: String = data
40
- . iter( )
41
- . filter_map( |& b| std:: char :: from_u32( b as u32 ) )
42
- . collect( ) ;
21
+ // Create an iterator for characters
22
+ let mut chars = string_data. chars( ) ;
43
23
44
- // Randomly choose a function target
45
- match data. first( ) . map( |& b| b % 10 ) {
46
- Some ( 0 ) => {
47
- if let Some ( c2) = c2 {
48
- let _ = compose( c, c2) ;
24
+ // Randomly fuzz a target function
25
+ match function_index % 10 {
26
+ 0 => {
27
+ // Fuzz compose with two distinct characters
28
+ if let ( Some ( c1) , Some ( c2) ) = ( chars. next( ) , chars. next( ) ) {
29
+ let _ = compose( c1, c2) ;
49
30
}
50
31
}
51
- Some ( 1 ) => {
52
- let _ = canonical_combining_class( c) ;
32
+ 1 => {
33
+ // Fuzz canonical_combining_class
34
+ if let Some ( c) = chars. next( ) {
35
+ let _ = canonical_combining_class( c) ;
36
+ }
53
37
}
54
- Some ( 2 ) => {
55
- let _ = is_combining_mark( c) ;
38
+ 2 => {
39
+ // Fuzz is_combining_mark
40
+ if let Some ( c) = chars. next( ) {
41
+ let _ = is_combining_mark( c) ;
42
+ }
56
43
}
57
- Some ( 3 ) => {
44
+ 3 => {
45
+ // Fuzz NFC
58
46
let _ = string_data. nfc( ) . collect:: <String >( ) ;
59
47
}
60
- Some ( 4 ) => {
48
+ 4 => {
49
+ // Fuzz NFKD
61
50
let _ = string_data. nfkd( ) . collect:: <String >( ) ;
62
51
}
63
- Some ( 5 ) => {
52
+ 5 => {
53
+ // Fuzz NFD
64
54
let _ = string_data. nfd( ) . collect:: <String >( ) ;
65
55
}
66
- Some ( 6 ) => {
56
+ 6 => {
57
+ // Fuzz NFKC
67
58
let _ = string_data. nfkc( ) . collect:: <String >( ) ;
68
59
}
69
- Some ( 7 ) => {
60
+ 7 => {
61
+ // Fuzz stream_safe
70
62
let _ = string_data. stream_safe( ) . collect:: <String >( ) ;
71
63
}
72
- Some ( 8 ) => {
73
- decompose_canonical( c, |_| { } ) ;
64
+ 8 => {
65
+ // Fuzz decompose_canonical
66
+ if let Some ( c) = chars. next( ) {
67
+ decompose_canonical( c, |_| { } ) ;
68
+ }
74
69
}
75
- Some ( 9 ) => {
76
- decompose_compatible( c, |_| { } ) ;
70
+ 9 => {
71
+ // Fuzz decompose_compatible
72
+ if let Some ( c) = chars. next( ) {
73
+ decompose_compatible( c, |_| { } ) ;
74
+ }
77
75
}
78
76
_ => { }
79
77
}
0 commit comments