summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2022-12-23 22:02:45 +0100
committerNeal H. Walfield <neal@pep.foundation>2022-12-23 22:04:14 +0100
commit4b07df64882cea1a4d581496b19013edab6f20e0 (patch)
treef7102dd0905fbfb90bc0080b62eb592acb0ff988
parent0d0d757f90b8b49010f998435a7e295cc0719ed2 (diff)
XXX: Reproducer for #967.neal/issuer-967
-rw-r--r--openpgp/src/parse.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/openpgp/src/parse.rs b/openpgp/src/parse.rs
index 9b90c751..c225d9a1 100644
--- a/openpgp/src/parse.rs
+++ b/openpgp/src/parse.rs
@@ -6293,4 +6293,45 @@ mod test {
}
Ok(())
}
+
+ #[test]
+ fn packet_before_junk_not_emitted() -> Result<()> {
+ let bytes = crate::tests::key("testy-new.pgp");
+
+ let mut ppr = match PacketParser::from_bytes(bytes) {
+ Ok(ppr) => ppr,
+ Err(_) => panic!("valid"),
+ };
+ let mut packets_ok = Vec::new();
+ while let PacketParserResult::Some(pp) = ppr {
+ if let Ok((packet, tmp)) = pp.recurse() {
+ packets_ok.push(packet);
+ ppr = tmp;
+ } else {
+ break;
+ }
+ }
+
+ let mut bytes = bytes.to_vec();
+ // Add some junk.
+ bytes.push(0);
+ let mut ppr = match PacketParser::from_bytes(&bytes[..]) {
+ Ok(ppr) => ppr,
+ Err(_) => panic!("valid"),
+ };
+ let mut packets_mangled = Vec::new();
+ while let PacketParserResult::Some(pp) = ppr {
+ if let Ok((packet, tmp)) = pp.recurse() {
+ packets_mangled.push(packet);
+ ppr = tmp;
+ } else {
+ break;
+ }
+ }
+
+ assert_eq!(packets_ok.len(), packets_mangled.len());
+ assert_eq!(packets_ok, packets_mangled);
+
+ Ok(())
+ }
}