From 265f72d99f92b5d47404eeb95b4abd20ca1e3ea3 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sun, 17 Mar 2024 17:11:28 +0100 Subject: [PATCH] Fix OOM when detached signing large files Fixes #432 --- .../org/pgpainless/sop/DetachedSignImpl.java | 5 ++--- .../org/pgpainless/sop/NullOutputStream.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 pgpainless-sop/src/main/java/org/pgpainless/sop/NullOutputStream.java diff --git a/pgpainless-sop/src/main/java/org/pgpainless/sop/DetachedSignImpl.java b/pgpainless-sop/src/main/java/org/pgpainless/sop/DetachedSignImpl.java index 034e13bc..400d2324 100644 --- a/pgpainless-sop/src/main/java/org/pgpainless/sop/DetachedSignImpl.java +++ b/pgpainless-sop/src/main/java/org/pgpainless/sop/DetachedSignImpl.java @@ -4,7 +4,6 @@ package org.pgpainless.sop; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -98,10 +97,10 @@ public class DetachedSignImpl implements DetachedSign { } } - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + OutputStream sink = new NullOutputStream(); try { EncryptionStream signingStream = PGPainless.encryptAndOrSign() - .onOutputStream(buffer) + .onOutputStream(sink) .withOptions(ProducerOptions.sign(signingOptions) .setAsciiArmor(armor)); diff --git a/pgpainless-sop/src/main/java/org/pgpainless/sop/NullOutputStream.java b/pgpainless-sop/src/main/java/org/pgpainless/sop/NullOutputStream.java new file mode 100644 index 00000000..9977ba28 --- /dev/null +++ b/pgpainless-sop/src/main/java/org/pgpainless/sop/NullOutputStream.java @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: 2024 Paul Schaub +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.sop; + +import java.io.OutputStream; + +/** + * {@link OutputStream} that simply discards bytes written to it. + */ +public class NullOutputStream extends OutputStream { + @Override + public void write(int b) { + // NOP + } +}