summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2021-02-17 16:48:30 +0100
committerJustus Winter <justus@sequoia-pgp.org>2021-02-17 16:55:00 +0100
commit1d7ef6ebc22bce6dfe0ea95c2f246a4b552ced47 (patch)
tree3a74b7fe73ee680a04a6c7b8617ed782b43c9ee5
parent042a582a4af1bb4667a597e5b69906a1d2ef2403 (diff)
Revert "openpgp: Only drop unread data from the top buffered reader."
- Previously, Sequoia did not properly consume excess bytes in a compression container that were not part of the compressed data. This resulted in the parser erroneously trying to parse the excess data into packets. Fix this by dropping any excess data. - We do this by reverting a previous change that made dropping excess data conditional. However, the reason for that change is unclear, and reverting it does not seem to have adverse effects. - This reverts commit c0f3de2e7fecc12717313900fdf4348e40ffb1f4. - Fixes #675.
-rw-r--r--openpgp/src/parse.rs20
1 files changed, 2 insertions, 18 deletions
diff --git a/openpgp/src/parse.rs b/openpgp/src/parse.rs
index 61ee0c2a..85dad81d 100644
--- a/openpgp/src/parse.rs
+++ b/openpgp/src/parse.rs
@@ -947,7 +947,6 @@ fn buffered_reader_stack_pop<'a>(
t!("(reader level: {:?}, pop through: {})",
reader.cookie_ref().level, depth);
- let mut last_level = None;
while let Some(level) = reader.cookie_ref().level {
assert!(level <= depth // Peel off exactly one level.
|| depth < 0); // Except for the topmost filters.
@@ -958,28 +957,15 @@ fn buffered_reader_stack_pop<'a>(
t!("top reader at level {:?} (fake eof: {}), pop through: {}",
reader.cookie_ref().level, fake_eof, depth);
- let (dropping_content, dropped_content)
- = if Some(level) != last_level {
- // Only drop the content of the top BufferedReader at
- // a given level.
- (true, reader.drop_eof()?)
- } else {
- assert_eq!(reader.buffer().len(), 0);
- (false, false)
- };
-
- t!("popping level {:?} reader, {}dropping content ({}), \
- reader: {:?}",
+ t!("popping level {:?} reader, reader: {:?}",
reader.cookie_ref().level,
- if dropping_content { "" } else { "not " },
- if dropped_content { "something dropped" }
- else { "nothing to drop" },
reader);
if reader.eof() && ! reader.consummated() {
return Err(Error::MalformedPacket("Truncated packet".into())
.into());
}
+ reader.drop_eof()?;
reader = reader.into_inner().unwrap();
if level == depth && fake_eof {
@@ -992,8 +978,6 @@ fn buffered_reader_stack_pop<'a>(
} else {
break;
}
-
- last_level = Some(level);
}
Ok((false, reader))