summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-11-19 01:17:18 +0000
committerJohn Turner <jturner.usa@gmail.com>2025-11-19 01:17:18 +0000
commit16fdd27e9ae2065b56dfdcbfd5bc259addebfc6a (patch)
tree87f8bb56c7284eccb7101140082f9caffbd15a29
parent70e8ea24a8ec9e3dfe484227463fdb97ee341227 (diff)
downloadgentoo-utils-16fdd27e9ae2065b56dfdcbfd5bc259addebfc6a.tar.gz
compare letters before suffixes, and having a letter is greater than none
-rw-r--r--src/atom/mod.rs27
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);
+ }
+ }
}