summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-09-03 12:24:29 +0200
committerJustus Winter <justus@sequoia-pgp.org>2019-09-03 12:36:04 +0200
commit7b9035fac61467482de683f890eb3c9971e955db (patch)
tree584024194ded707adaf620af6fc817ba39b93294
parent7901c7ee84e7863c5227ded5f29a36beddbcecb8 (diff)
openpgp: Assert that central types are Send and Sync.
- Add compile-time assertions that public types like Packet, TPK, Message... can be send across thread boundaries, and can be safely accessed from multiple threads. - Fixes #334.
-rw-r--r--openpgp/src/fingerprint.rs7
-rw-r--r--openpgp/src/keyid.rs6
-rw-r--r--openpgp/src/message/mod.rs6
-rw-r--r--openpgp/src/packet/mod.rs11
-rw-r--r--openpgp/src/packet_pile.rs6
-rw-r--r--openpgp/src/tpk/mod.rs6
6 files changed, 42 insertions, 0 deletions
diff --git a/openpgp/src/fingerprint.rs b/openpgp/src/fingerprint.rs
index a12ec118..309313be 100644
--- a/openpgp/src/fingerprint.rs
+++ b/openpgp/src/fingerprint.rs
@@ -191,4 +191,11 @@ Charlie Delta Echo Foxtrot Zero One Two Three Four Five Six Seven";
assert_eq!(fpr.to_icao(), expected);
}
+
+ #[test]
+ fn fingerprint_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(Fingerprint::from_hex(
+ "0123 4567 89AB CDEF 0123 4567 89AB CDEF 0123 4567").unwrap());
+ }
}
diff --git a/openpgp/src/keyid.rs b/openpgp/src/keyid.rs
index 2e77c962..275599f9 100644
--- a/openpgp/src/keyid.rs
+++ b/openpgp/src/keyid.rs
@@ -215,4 +215,10 @@ mod test {
assert_match!(KeyID::Invalid(_) =
KeyID::from_hex("0x587DAEF1").unwrap());
}
+
+ #[test]
+ fn keyid_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(KeyID::from_hex("89AB CDEF 0123 4567").unwrap());
+ }
}
diff --git a/openpgp/src/message/mod.rs b/openpgp/src/message/mod.rs
index 30f8268d..a2f8b7ce 100644
--- a/openpgp/src/message/mod.rs
+++ b/openpgp/src/message/mod.rs
@@ -1109,4 +1109,10 @@ mod tests {
let message = Message::from_packets(packets.clone());
assert!(message.is_ok(), "{:#?}", message);
}
+
+ #[test]
+ fn message_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(Message::from_packets(vec![]));
+ }
}
diff --git a/openpgp/src/packet/mod.rs b/openpgp/src/packet/mod.rs
index 1c457fac..23fa16c0 100644
--- a/openpgp/src/packet/mod.rs
+++ b/openpgp/src/packet/mod.rs
@@ -973,3 +973,14 @@ impl DerefMut for AED {
}
}
}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn packet_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(Packet::Marker(Default::default()));
+ }
+}
diff --git a/openpgp/src/packet_pile.rs b/openpgp/src/packet_pile.rs
index 275c0dba..4d6e29fa 100644
--- a/openpgp/src/packet_pile.rs
+++ b/openpgp/src/packet_pile.rs
@@ -861,4 +861,10 @@ mod test {
assert!(pile.replace(&[ 0, 0 ], 0, Vec::new()).is_ok());
assert!(pile.replace(&[ 0, 1 ], 0, Vec::new()).is_err());
}
+
+ #[test]
+ fn packet_pile_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(PacketPile::from(vec![]));
+ }
}
diff --git a/openpgp/src/tpk/mod.rs b/openpgp/src/tpk/mod.rs
index fce5a9e5..18d23ce9 100644
--- a/openpgp/src/tpk/mod.rs
+++ b/openpgp/src/tpk/mod.rs
@@ -2616,4 +2616,10 @@ Pu1xwz57O4zo1VYf6TqHJzVC3OMvMUM2hhdecMUe5x6GorNaj6g=
keyring.extend_from_slice(crate::tests::key("neal.pgp"));
assert!(TPK::from_bytes(&keyring).is_err());
}
+
+ #[test]
+ fn tpk_is_send_and_sync() {
+ fn f<T: Send + Sync>(_: T) {}
+ f(TPK::from_bytes(crate::tests::key("testy-new.pgp")).unwrap());
+ }
}