diff --git a/fleet/rpc/src/fleet/rpc/core/Serialization.kt b/fleet/rpc/src/fleet/rpc/core/Serialization.kt index 11a3a55405dc..005253821329 100644 --- a/fleet/rpc/src/fleet/rpc/core/Serialization.kt +++ b/fleet/rpc/src/fleet/rpc/core/Serialization.kt @@ -24,7 +24,6 @@ import kotlinx.serialization.modules.SerializersModule import kotlinx.serialization.serializer import java.util.concurrent.ConcurrentHashMap import kotlin.coroutines.CoroutineContext -import kotlin.io.encoding.Base64 import kotlin.io.encoding.ExperimentalEncodingApi import kotlin.reflect.KClass import kotlin.reflect.KClassifier @@ -360,12 +359,12 @@ class Blob(val bytes: ByteArray) { object BlobSerializer : DataSerializer(String.serializer()) { @OptIn(ExperimentalEncodingApi::class) override fun fromData(data: String): Blob { - return Blob(Base64.decode(data)) + return Blob(Base64WithOptionalPadding.decode(data)) } @OptIn(ExperimentalEncodingApi::class) override fun toData(value: Blob): String { - return Base64.encode(value.bytes) + return Base64WithOptionalPadding.encode(value.bytes) } } diff --git a/fleet/util/core/src/fleet/util/Bytes.kt b/fleet/util/core/src/fleet/util/Bytes.kt index 98ad8454d657..c10456ce6394 100644 --- a/fleet/util/core/src/fleet/util/Bytes.kt +++ b/fleet/util/core/src/fleet/util/Bytes.kt @@ -1,6 +1,9 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package fleet.util +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi + /* * Following functions are used to replace jvm specific byte array to string conversion that explicitly specified UTF-8 as charset. */ @@ -15,3 +18,11 @@ fun ByteArray.decodeToStringUtf8( endIndex: Int = this.size, throwOnInvalidSequence: Boolean = false ): String = decodeToString(startIndex, endIndex, throwOnInvalidSequence) + +// Replaces java.util.Base64.getDecoder(), which did not require padding on decoding +@OptIn(ExperimentalEncodingApi::class) +val Base64WithOptionalPadding = Base64.withPadding(Base64.PaddingOption.PRESENT_OPTIONAL) + +// Replaces java.util.Base64.getUrlDecoder(), which did not require padding on decoding +@OptIn(ExperimentalEncodingApi::class) +val UrlSafeBase64WithOptionalPadding = Base64.UrlSafe.withPadding(Base64.PaddingOption.PRESENT_OPTIONAL)