mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-12-22 10:57:58 +01:00
OpenPgpMessageInputStream: Return -1 instead of throwing MalformedOpenPgpMessageException when calling read() on drained stream
This commit is contained in:
parent
558036c485
commit
52fa7e4d46
3 changed files with 23 additions and 0 deletions
|
@ -744,6 +744,7 @@ public class OpenPgpMessageInputStream extends DecryptionStream {
|
|||
throws IOException {
|
||||
if (nestedInputStream == null) {
|
||||
if (packetInputStream != null) {
|
||||
syntaxVerifier.next(InputSymbol.EndOfSequence);
|
||||
syntaxVerifier.assertValid();
|
||||
}
|
||||
return -1;
|
||||
|
@ -774,6 +775,7 @@ public class OpenPgpMessageInputStream extends DecryptionStream {
|
|||
super.close();
|
||||
if (closed) {
|
||||
if (packetInputStream != null) {
|
||||
syntaxVerifier.next(InputSymbol.EndOfSequence);
|
||||
syntaxVerifier.assertValid();
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -132,6 +132,10 @@ public class OpenPgpMessageSyntax implements Syntax {
|
|||
@Nonnull
|
||||
Transition fromValid(@Nonnull InputSymbol input, @Nullable StackSymbol stackItem)
|
||||
throws MalformedOpenPgpMessageException {
|
||||
if (input == InputSymbol.EndOfSequence) {
|
||||
// allow subsequent read() calls.
|
||||
return new Transition(State.Valid);
|
||||
}
|
||||
// There is no applicable transition rule out of Valid
|
||||
throw new MalformedOpenPgpMessageException(State.Valid, input, stackItem);
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.bouncycastle.openpgp.PGPSignature;
|
|||
import org.bouncycastle.util.io.Streams;
|
||||
import org.junit.JUtils;
|
||||
import org.junit.jupiter.api.Named;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
@ -652,6 +653,22 @@ public class OpenPgpMessageInputStreamTest {
|
|||
assertTrue(metadata.getRejectedInlineSignatures().isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void readAfterCloseTest() throws PGPException, IOException {
|
||||
OpenPgpMessageInputStream pgpIn = get(SENC_LIT, ConsumerOptions.get()
|
||||
.addDecryptionPassphrase(Passphrase.fromPassword(PASSPHRASE)));
|
||||
Streams.drain(pgpIn); // read all
|
||||
|
||||
byte[] buf = new byte[1024];
|
||||
assertEquals(-1, pgpIn.read(buf));
|
||||
assertEquals(-1, pgpIn.read());
|
||||
assertEquals(-1, pgpIn.read(buf));
|
||||
assertEquals(-1, pgpIn.read());
|
||||
|
||||
pgpIn.close();
|
||||
pgpIn.getMetadata();
|
||||
}
|
||||
|
||||
private static Tuple<String, MessageMetadata> processReadBuffered(String armoredMessage, ConsumerOptions options)
|
||||
throws PGPException, IOException {
|
||||
OpenPgpMessageInputStream in = get(armoredMessage, options);
|
||||
|
|
Loading…
Reference in a new issue