From 4f4b4ea87fbee267c41a66d2338c28598381e479 Mon Sep 17 00:00:00 2001 From: Aditya Wasan Date: Tue, 10 Oct 2023 19:01:19 -0400 Subject: [PATCH] fix: detect stream correctly in presence of whitespace Signed-off-by: Aditya Wasan --- src/kotlin/kage/Age.kt | 8 +++++--- src/kotlin/kage/crypto/stream/ArmorInputStream.kt | 3 +-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/kotlin/kage/Age.kt b/src/kotlin/kage/Age.kt index b599bf8..2ddb478 100644 --- a/src/kotlin/kage/Age.kt +++ b/src/kotlin/kage/Age.kt @@ -66,14 +66,16 @@ public object Age { val markSupportedStream = if (srcStream.markSupported()) srcStream else BufferedInputStream(srcStream) - markSupportedStream.mark(ArmorInputStream.HEADER.length) + // Check if the InputStream contains whitespace + header + val readLimit = ArmorInputStream.MAX_WHITESPACE + ArmorInputStream.HEADER.length + markSupportedStream.mark(readLimit) - val headerStr = markSupportedStream.readNBytes(ArmorInputStream.HEADER.length).decodeToString() + val initialString = markSupportedStream.readNBytes(readLimit).decodeToString() markSupportedStream.reset() val decodedStream = - if (headerStr.startsWith(ArmorInputStream.HEADER_START)) { + if (initialString.contains(ArmorInputStream.HEADER_START)) { ArmorInputStream(markSupportedStream) } else markSupportedStream diff --git a/src/kotlin/kage/crypto/stream/ArmorInputStream.kt b/src/kotlin/kage/crypto/stream/ArmorInputStream.kt index 9daf48d..7f3dd83 100644 --- a/src/kotlin/kage/crypto/stream/ArmorInputStream.kt +++ b/src/kotlin/kage/crypto/stream/ArmorInputStream.kt @@ -111,7 +111,6 @@ internal class ArmorInputStream(src: InputStream) : InputStream() { const val COLUMNS_PER_LINE = 64 const val BYTES_PER_LINE = COLUMNS_PER_LINE / 4 * 3 - - private const val MAX_WHITESPACE = 1024 + const val MAX_WHITESPACE = 1024 } }