diff options
author | Neal H. Walfield <neal@pep.foundation> | 2022-12-23 22:02:45 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@pep.foundation> | 2022-12-23 22:04:14 +0100 |
commit | 4b07df64882cea1a4d581496b19013edab6f20e0 (patch) | |
tree | f7102dd0905fbfb90bc0080b62eb592acb0ff988 | |
parent | 0d0d757f90b8b49010f998435a7e295cc0719ed2 (diff) |
XXX: Reproducer for #967.neal/issuer-967
-rw-r--r-- | openpgp/src/parse.rs | 41 |
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(()) + } } |