summaryrefslogtreecommitdiffstats
path: root/vendor/const-oid/src/lib.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:50 +0000
commit9835e2ae736235810b4ea1c162ca5e65c547e770 (patch)
tree3fcebf40ed70e581d776a8a4c65923e8ec20e026 /vendor/const-oid/src/lib.rs
parentReleasing progress-linux version 1.70.0+dfsg2-1~progress7.99u1. (diff)
downloadrustc-9835e2ae736235810b4ea1c162ca5e65c547e770.tar.xz
rustc-9835e2ae736235810b4ea1c162ca5e65c547e770.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/const-oid/src/lib.rs')
-rw-r--r--vendor/const-oid/src/lib.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/vendor/const-oid/src/lib.rs b/vendor/const-oid/src/lib.rs
index b00d4e2e7..5bdef085d 100644
--- a/vendor/const-oid/src/lib.rs
+++ b/vendor/const-oid/src/lib.rs
@@ -252,3 +252,29 @@ impl fmt::Display for ObjectIdentifier {
Ok(())
}
}
+
+// Implement by hand because the derive would create invalid values.
+// Use the constructor to create a valid oid with at least 3 arcs.
+#[cfg(feature = "arbitrary")]
+impl<'a> arbitrary::Arbitrary<'a> for ObjectIdentifier {
+ fn arbitrary(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<Self> {
+ let first = u.int_in_range(0..=arcs::ARC_MAX_FIRST)?;
+ let second = u.int_in_range(0..=arcs::ARC_MAX_SECOND)?;
+ let third = u.arbitrary()?;
+
+ let mut oid = Self::from_arcs([first, second, third])
+ .map_err(|_| arbitrary::Error::IncorrectFormat)?;
+
+ for arc in u.arbitrary_iter()? {
+ oid = oid
+ .push_arc(arc?)
+ .map_err(|_| arbitrary::Error::IncorrectFormat)?;
+ }
+
+ Ok(oid)
+ }
+
+ fn size_hint(depth: usize) -> (usize, Option<usize>) {
+ (Arc::size_hint(depth).0.saturating_mul(3), None)
+ }
+}