diff options
author | Nora Widdecke <nora@sequoia-pgp.org> | 2022-08-26 12:39:04 +0200 |
---|---|---|
committer | Nora Widdecke <nora@sequoia-pgp.org> | 2022-09-07 16:24:48 +0200 |
commit | 273459c3c784ae1ff00c7fe8c2c7449c602a0a74 (patch) | |
tree | aaa04b0900dadae06a9fca19e372f4bb9def1db3 | |
parent | 9c9d3b9386d9df97a1efec71480b6a04dd991dd3 (diff) |
sq: Rewrite detect_armor_kind.
-rw-r--r-- | sq/src/sq.rs | 38 |
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) } |