summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@pep.foundation>2017-12-13 08:56:54 +0100
committerNeal H. Walfield <neal@pep.foundation>2017-12-13 08:56:54 +0100
commite7220cdf275451d8b9a57e0e062b30ee7350b23e (patch)
treeafeb55edcc10947c92587b8936843cf2a8803be6
parent557eabdb50d1ca6e8c1bf2b644eec504317ab312 (diff)
Don't store the packet tag in PacketCommon.
- Given a `Packet`, the packet tag is unambiguous in all cases except for unknown packets. As such, don't store the tag in PacketCommon; only store it when it is actually needed.
-rw-r--r--src/openpgp/openpgp.rs4
-rw-r--r--src/openpgp/parse/parse.rs15
2 files changed, 6 insertions, 13 deletions
diff --git a/src/openpgp/openpgp.rs b/src/openpgp/openpgp.rs
index 547f2239..12342f06 100644
--- a/src/openpgp/openpgp.rs
+++ b/src/openpgp/openpgp.rs
@@ -181,7 +181,6 @@ pub enum BodyLength {
#[derive(PartialEq)]
pub struct PacketCommon {
- tag: Tag,
children: Option<Container>,
content: Option<Vec<u8>>,
}
@@ -189,7 +188,6 @@ pub struct PacketCommon {
impl std::fmt::Debug for PacketCommon {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct("Signature")
- .field("tag", &self.tag)
.field("children", &self.children)
.field("content (bytes)",
&self.content.as_ref().map(|content| content.len()))
@@ -207,6 +205,7 @@ pub struct Header {
#[derive(PartialEq,Debug)]
pub struct Unknown {
common: PacketCommon,
+ tag: Tag,
}
#[derive(PartialEq)]
@@ -260,7 +259,6 @@ impl std::fmt::Debug for Key {
let mpis = format!("{} bytes", self.mpis.len());
f.debug_struct("Key")
- .field("tag", &self.common.tag)
.field("version", &self.version)
.field("creation_time", &self.creation_time)
.field("pk_algo", &self.pk_algo)
diff --git a/src/openpgp/parse/parse.rs b/src/openpgp/parse/parse.rs
index a0d72295..544930aa 100644
--- a/src/openpgp/parse/parse.rs
+++ b/src/openpgp/parse/parse.rs
@@ -164,15 +164,15 @@ fn header<R: BufferedReader> (bio: &mut R)
return Ok(Header { ctb: ctb, length: length });
}
-fn unknown_parser<'a, R: BufferedReader + 'a>(bio: R)
+fn unknown_parser<'a, R: BufferedReader + 'a>(bio: R, tag: Tag)
-> Result<PacketParser<'a>, std::io::Error> {
return Ok(PacketParser {
packet: Packet::Unknown(Unknown {
common: PacketCommon {
- tag: Tag::Signature,
children: None,
content: None,
},
+ tag: tag,
}),
reader: Box::new(bio),
recursion_depth: 0,
@@ -197,7 +197,6 @@ fn signature_parser<'a, R: BufferedReader + 'a>(mut bio: R)
return Ok(PacketParser {
packet: Packet::Signature(Signature {
common: PacketCommon {
- tag: Tag::Signature,
children: None,
content: None,
},
@@ -263,7 +262,6 @@ fn key_parser<'a, R: BufferedReader + 'a>(mut bio: R, tag: Tag)
let key = Key {
common: PacketCommon {
- tag: tag,
children: None,
content: None,
},
@@ -293,7 +291,6 @@ fn userid_parser<'a, R: BufferedReader + 'a>(mut bio: R)
return Ok(PacketParser {
packet: Packet::UserID(UserID {
common: PacketCommon {
- tag: Tag::UserID,
children: None,
content: None,
},
@@ -323,7 +320,6 @@ fn literal_parser<'a, R: BufferedReader + 'a>(mut bio: R)
return Ok(PacketParser {
packet: Packet::Literal(Literal {
common: PacketCommon {
- tag: Tag::Literal,
children: None,
content: None,
},
@@ -431,10 +427,10 @@ fn compressed_data_parser<'a, R: BufferedReader + 'a>(mut bio: R)
return Ok(PacketParser {
packet: Packet::Unknown(Unknown {
common: PacketCommon {
- tag: Tag::CompressedData,
children: None,
content: None,
- }
+ },
+ tag: Tag::CompressedData,
}),
reader: Box::new(bio),
recursion_depth: 0,
@@ -446,7 +442,6 @@ fn compressed_data_parser<'a, R: BufferedReader + 'a>(mut bio: R)
return Ok(PacketParser {
packet: Packet::CompressedData(CompressedData {
common: PacketCommon {
- tag: Tag::CompressedData,
children: None,
content: None,
},
@@ -639,7 +634,7 @@ impl <'a> PacketParser<'a> {
Tag::CompressedData =>
compressed_data_parser(bio)?,
_ =>
- unknown_parser(bio)?,
+ unknown_parser(bio, tag)?,
};
return Ok(PacketParserOrBufferedReader::PacketParser(result));