From 2655aaa633e8f132e4a3a66db7f6b3acbd5b50c3 Mon Sep 17 00:00:00 2001 From: hultonha Date: Wed, 14 Apr 2021 11:30:40 +0100 Subject: [PATCH] update ByteStreamSerializer to use Base64 encoding --- .../Json/ByteStreamSerializer.cpp | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Serialization/Json/ByteStreamSerializer.cpp b/Code/Framework/AzCore/AzCore/Serialization/Json/ByteStreamSerializer.cpp index 2da71ba68a..09adaf38cb 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/Json/ByteStreamSerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/Json/ByteStreamSerializer.cpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace AZ { @@ -31,11 +32,13 @@ namespace AZ { case rapidjson::kStringType: { JsonByteStream* valAsByteStream = static_cast(outputValue); - JsonByteStream buffer; - buffer.resize(inputValue.GetStringLength()); - AZStd::copy(inputValue.GetString(), inputValue.GetString() + inputValue.GetStringLength(), buffer.begin()); - *valAsByteStream = AZStd::move(buffer); - return context.Report(Tasks::ReadField, Outcomes::Success, "Successfully read ByteStream."); + JsonByteStream buffer(inputValue.GetStringLength()); + if (AZ::StringFunc::Base64::Decode(buffer, inputValue.GetString(), inputValue.GetStringLength())) + { + *valAsByteStream = AZStd::move(buffer); + return context.Report(Tasks::ReadField, Outcomes::Success, "Successfully read ByteStream."); + } + return context.Report(Tasks::ReadField, Outcomes::Invalid, "Decode of Base64 encoded ByteStream failed."); } case rapidjson::kArrayType: case rapidjson::kObjectType: @@ -58,12 +61,10 @@ namespace AZ using JsonSerializationResult::Tasks; const JsonByteStream& valAsByteStream = *static_cast(inputValue); - if (context.ShouldKeepDefaults() || !defaultValue || - (valAsByteStream != *static_cast(defaultValue))) + if (context.ShouldKeepDefaults() || !defaultValue || (valAsByteStream != *static_cast(defaultValue))) { - outputValue.SetString( - reinterpret_cast(valAsByteStream.data()), aznumeric_caster(valAsByteStream.size()), - context.GetJsonAllocator()); + const auto base64ByteStream = AZ::StringFunc::Base64::Encode(valAsByteStream.data(), valAsByteStream.size()); + outputValue.SetString(base64ByteStream.c_str(), base64ByteStream.size(), context.GetJsonAllocator()); return context.Report(Tasks::WriteValue, Outcomes::Success, "ByteStream successfully stored."); }