diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-11-19 01:17:18 +0000 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-11-19 01:17:18 +0000 |
| commit | 16fdd27e9ae2065b56dfdcbfd5bc259addebfc6a (patch) | |
| tree | 87f8bb56c7284eccb7101140082f9caffbd15a29 | |
| parent | 70e8ea24a8ec9e3dfe484227463fdb97ee341227 (diff) | |
| download | gentoo-utils-16fdd27e9ae2065b56dfdcbfd5bc259addebfc6a.tar.gz | |
compare letters before suffixes, and having a letter is greater than none
| -rw-r--r-- | src/atom/mod.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/atom/mod.rs b/src/atom/mod.rs index 6251e35..6b2b51f 100644 --- a/src/atom/mod.rs +++ b/src/atom/mod.rs @@ -407,12 +407,6 @@ impl Ord for Version { Ordering::Equal => (), } - match self.suffixes.cmp(&other.suffixes) { - Ordering::Less => return Ordering::Less, - Ordering::Greater => return Ordering::Greater, - Ordering::Equal => (), - } - match (self.letter, other.letter) { (Some(a), Some(b)) if a < b => return Ordering::Less, (Some(a), Some(b)) if a > b => return Ordering::Greater, @@ -423,6 +417,12 @@ impl Ord for Version { _ => unreachable!(), } + match self.suffixes.cmp(&other.suffixes) { + Ordering::Less => return Ordering::Less, + Ordering::Greater => return Ordering::Greater, + Ordering::Equal => (), + } + match (&self.rev, &other.rev) { (Some(a), Some(b)) => match a .get() @@ -866,4 +866,19 @@ mod test { assert_cmp_display!(a, b, Ordering::Greater); } + + #[test] + fn test_fuzzer_cases() { + let control = Version::parser() + .parse_finished(InputIter::new("1.2.0a_alpha1_beta2-r1-8")) + .unwrap(); + + for (version_str, expected) in [("1.2.0", Ordering::Greater)] { + let version = Version::parser() + .parse_finished(InputIter::new(version_str)) + .unwrap(); + + assert_cmp_display!(control, version, expected); + } + } } |
