From 8b8d62f59893901a7e7284d057ac51ab07f8043e Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Fri, 30 Jun 2023 11:06:51 -0400 Subject: [PATCH] Only close AttachmentCipher streams if using incremental MAC. --- .../internal/push/http/DigestingRequestBody.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/http/DigestingRequestBody.kt b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/http/DigestingRequestBody.kt index 0eb56ef1d7..adf5e8b133 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/http/DigestingRequestBody.kt +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/http/DigestingRequestBody.kt @@ -41,8 +41,9 @@ class DigestingRequestBody( override fun writeTo(sink: BufferedSink) { val digestStream = ByteArrayOutputStream() val inner = SkippingOutputStream(contentStart, sink.outputStream()) - val outputStream: DigestingOutputStream = if (outputStreamFactory is AttachmentCipherOutputStreamFactory) { - outputStreamFactory.createIncrementalFor(inner, contentLength, digestStream) + val isIncremental = outputStreamFactory is AttachmentCipherOutputStreamFactory + val outputStream: DigestingOutputStream = if (isIncremental) { + (outputStreamFactory as AttachmentCipherOutputStreamFactory).createIncrementalFor(inner, contentLength, digestStream) } else { outputStreamFactory.createFor(inner) } @@ -61,10 +62,11 @@ class DigestingRequestBody( } outputStream.flush() - outputStream.close() - digestStream.close() - - incrementalDigest = digestStream.toByteArray() + if (isIncremental) { + outputStream.close() + digestStream.close() + incrementalDigest = digestStream.toByteArray() + } transmittedDigest = outputStream.transmittedDigest }