summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNora Widdecke <nora@sequoia-pgp.org>2022-08-26 12:39:04 +0200
committerNora Widdecke <nora@sequoia-pgp.org>2022-09-07 16:24:48 +0200
commit273459c3c784ae1ff00c7fe8c2c7449c602a0a74 (patch)
treeaaa04b0900dadae06a9fca19e372f4bb9def1db3
parent9c9d3b9386d9df97a1efec71480b6a04dd991dd3 (diff)
sq: Rewrite detect_armor_kind.
-rw-r--r--sq/src/sq.rs38
1 files changed, 15 insertions, 23 deletions
diff --git a/sq/src/sq.rs b/sq/src/sq.rs
index 79b17b81..9fef712d 100644
--- a/sq/src/sq.rs
+++ b/sq/src/sq.rs
@@ -191,29 +191,21 @@ const ARMOR_DETECTION_LIMIT: u64 = 1 << 24;
///
/// Returns the given reader unchanged. If the detection fails,
/// armor::Kind::File is returned as safe default.
-#[allow(clippy::never_loop)]
-fn detect_armor_kind(input: Box<dyn BufferedReader<()>>)
- -> (Box<dyn BufferedReader<()>>, armor::Kind) {
- let mut dup = Limitor::new(Dup::new(input), ARMOR_DETECTION_LIMIT).as_boxed();
- let kind = 'detection: loop {
- if let Ok(PacketParserResult::Some(pp)) =
- PacketParser::from_reader(&mut dup)
- {
- let (packet, _) = match pp.next() {
- Ok(v) => v,
- Err(_) => break 'detection armor::Kind::File,
- };
-
- break 'detection match packet {
- Packet::Signature(_) => armor::Kind::Signature,
- Packet::SecretKey(_) => armor::Kind::SecretKey,
- Packet::PublicKey(_) => armor::Kind::PublicKey,
- Packet::PKESK(_) | Packet::SKESK(_) =>
- armor::Kind::Message,
- _ => armor::Kind::File,
- };
- }
- break 'detection armor::Kind::File;
+fn detect_armor_kind(
+ input: Box<dyn BufferedReader<()>>,
+) -> (Box<dyn BufferedReader<()>>, armor::Kind) {
+ let mut dup =
+ Limitor::new(Dup::new(input), ARMOR_DETECTION_LIMIT).as_boxed();
+ let kind = match PacketParser::from_reader(&mut dup) {
+ Ok(PacketParserResult::Some(pp)) => match pp.next() {
+ Ok((Packet::Signature(_), _)) => armor::Kind::Signature,
+ Ok((Packet::SecretKey(_), _)) => armor::Kind::SecretKey,
+ Ok((Packet::PublicKey(_), _)) => armor::Kind::PublicKey,
+ Ok((Packet::PKESK(_), _)) => armor::Kind::Message,
+ Ok((Packet::SKESK(_), _)) => armor::Kind::Message,
+ _ => armor::Kind::File,
+ },
+ _ => armor::Kind::File,
};
(dup.into_inner().unwrap().into_inner().unwrap(), kind)
}