Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc993dd1

Browse files
committed
Track position where normalization failed
1 parentec98c83 commitc993dd1

File tree

3 files changed

+177
-104
lines changed

3 files changed

+177
-104
lines changed

‎fuzz/fuzz_targets/unicode-normalization.rs‎

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,74 +4,66 @@
44
externcrate libfuzzer_sys;
55

66
use unicode_normalization::{
7-
is_nfc, is_nfc_quick, is_nfc_stream_safe, is_nfc_stream_safe_quick, is_nfd, is_nfd_quick,
8-
is_nfd_stream_safe, is_nfd_stream_safe_quick, is_nfkc, is_nfkc_quick, is_nfkd, is_nfkd_quick,
9-
IsNormalized,UnicodeNormalization,
7+
check_nfc_quick, check_nfc_stream_safe_quick, check_nfd_quick, check_nfd_stream_safe_quick,
8+
check_nfkc_quick, check_nfkd_quick, is_nfc, is_nfc_stream_safe, is_nfd, is_nfd_stream_safe,
9+
is_nfkc, is_nfkd,UnicodeNormalization,
1010
};
1111

12-
fnfrom_bool(is_normalized:bool) ->IsNormalized{
13-
if is_normalized{
14-
IsNormalized::Yes
15-
}else{
16-
IsNormalized::No
17-
}
18-
}
19-
2012
fuzz_target!(|input:String|{
2113
// The full predicates imply the quick predicates.
22-
assert_ne!(is_nfc_quick(input.chars()), from_bool(!is_nfc(&input)));
23-
assert_ne!(is_nfd_quick(input.chars()), from_bool(!is_nfd(&input)));
24-
assert_ne!(is_nfkc_quick(input.chars()), from_bool(!is_nfkc(&input)));
25-
assert_ne!(is_nfkd_quick(input.chars()), from_bool(!is_nfkd(&input)));
26-
assert_ne!(
27-
is_nfc_stream_safe_quick(input.chars()),
28-
from_bool(!is_nfc_stream_safe(&input))
14+
assert_eq!(check_nfc_quick(&input).is_ok(),is_nfc(&input));
15+
assert_eq!(check_nfd_quick(&input).is_ok(),is_nfd(&input));
16+
assert_eq!(check_nfkc_quick(&input).is_ok(),is_nfkc(&input));
17+
assert_eq!(check_nfkd_quick(&input).is_ok(),is_nfkd(&input));
18+
assert_eq!(
19+
check_nfc_stream_safe_quick(&input).is_ok(),
20+
is_nfc_stream_safe(&input)
2921
);
30-
assert_ne!(
31-
is_nfd_stream_safe_quick(input.chars()),
32-
from_bool(!is_nfd_stream_safe(&input))
22+
assert_eq!(
23+
check_nfd_stream_safe_quick(&input).is_ok(),
24+
is_nfd_stream_safe(&input)
3325
);
3426

3527
// Check NFC, NFD, NFKC, and NFKD normalization.
36-
let nfc = input.chars().nfc().collect::<String>();
28+
let nfc = input.nfc().collect::<String>();
3729
assert_eq!(nfc.is_empty(), input.is_empty());
38-
assert_ne!(is_nfc_quick(nfc.chars()),IsNormalized::No);
30+
assert!(check_nfc_quick(&nfc).is_ok());
3931
assert!(is_nfc(&nfc));
4032

41-
let nfd = input.chars().nfd().collect::<String>();
33+
let nfd = input.nfd().collect::<String>();
4234
assert!(nfd.len() >= nfc.len());
43-
assert_ne!(is_nfd_quick(nfd.chars()),IsNormalized::No);
35+
assert!(check_nfd_quick(&nfd).is_ok());
4436
assert!(is_nfd(&nfd));
4537

46-
let nfkc = input.chars().nfkc().collect::<String>();
38+
let nfkc = input.nfkc().collect::<String>();
4739
assert_eq!(nfkc.is_empty(), input.is_empty());
48-
assert_ne!(is_nfkc_quick(nfkc.chars()),IsNormalized::No);
40+
assert!(check_nfkc_quick(&nfkc).is_ok());
4941
assert!(is_nfkc(&nfkc));
5042

51-
let nfkd = input.chars().nfkd().collect::<String>();
43+
let nfkd = input.nfkd().collect::<String>();
5244
assert!(nfkd.len() >= nfkc.len());
53-
assert_ne!(is_nfkd_quick(nfkd.chars()),IsNormalized::No);
45+
assert!(check_nfkd_quick(&nfkd).is_ok());
5446
assert!(is_nfkd(&nfkd));
5547

5648
// Check stream-safe.
57-
let nfc_ss = nfc.chars().stream_safe().collect::<String>();
49+
let nfc_ss = nfc.stream_safe().collect::<String>();
5850
assert!(nfc_ss.len() >= nfc.len());
59-
assert_ne!(is_nfc_stream_safe_quick(nfc_ss.chars()),IsNormalized::No);
51+
assert!(check_nfc_stream_safe_quick(&nfc_ss).is_ok());
6052
assert!(is_nfc_stream_safe(&nfc_ss));
6153

62-
let nfd_ss = nfd.chars().stream_safe().collect::<String>();
54+
let nfd_ss = nfd.stream_safe().collect::<String>();
6355
assert!(nfd_ss.len() >= nfd.len());
64-
assert_ne!(is_nfd_stream_safe_quick(nfd_ss.chars()),IsNormalized::No);
56+
assert!(check_nfd_stream_safe_quick(&nfd_ss).is_ok());
6557
assert!(is_nfd_stream_safe(&nfd_ss));
6658

6759
// Check that NFC and NFD preserve stream-safe.
68-
let ss_nfc = input.chars().stream_safe().nfc().collect::<String>();
60+
let ss_nfc = input.stream_safe().nfc().collect::<String>();
6961
assert_eq!(ss_nfc.is_empty(), input.is_empty());
70-
assert_ne!(is_nfc_stream_safe_quick(ss_nfc.chars()),IsNormalized::No);
62+
assert!(check_nfc_stream_safe_quick(&ss_nfc).is_ok());
7163
assert!(is_nfc_stream_safe(&ss_nfc));
7264

73-
let ss_nfd = input.chars().stream_safe().nfd().collect::<String>();
65+
let ss_nfd = input.stream_safe().nfd().collect::<String>();
7466
assert_eq!(ss_nfd.is_empty(), input.is_empty());
75-
assert_ne!(is_nfd_stream_safe_quick(ss_nfd.chars()),IsNormalized::No);
67+
assert!(check_nfd_stream_safe_quick(&ss_nfd).is_ok());
7668
assert!(is_nfd_stream_safe(&ss_nfd));
7769
});

‎src/lib.rs‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ extern crate tinyvec;
5454

5555
pubusecrate::decompose::Decompositions;
5656
pubusecrate::quick_check::{
57-
is_nfc, is_nfc_quick, is_nfc_stream_safe, is_nfc_stream_safe_quick, is_nfd, is_nfd_quick,
58-
is_nfd_stream_safe, is_nfd_stream_safe_quick, is_nfkc, is_nfkc_quick, is_nfkd, is_nfkd_quick,
59-
IsNormalized,
57+
check_nfc, check_nfc_quick, check_nfc_stream_safe, check_nfc_stream_safe_quick, check_nfd,
58+
check_nfd_quick, check_nfd_stream_safe, check_nfd_stream_safe_quick, check_nfkc,
59+
check_nfkc_quick, check_nfkd, check_nfkd_quick, is_nfc, is_nfc_stream_safe, is_nfd,
60+
is_nfd_stream_safe, is_nfkc, is_nfkd,FullResult,NormalizationError,QuickCheck,QuickResult,
6061
};
6162
pubusecrate::recompose::Recompositions;
6263
pubusecrate::replace::Replacements;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp