diff --git a/src/util/stringutil.cpp b/src/util/stringutil.cpp index 1fabcd2c..d1148da5 100644 --- a/src/util/stringutil.cpp +++ b/src/util/stringutil.cpp @@ -317,7 +317,7 @@ std::string util::base64_encode(const ubyte* data, size_t size) { ending[i - fullsegments] = data[i]; } size_t trailing = size - fullsegments; - { + if (trailing) { char output[] = "===="; output[0] = B64ABC[(ending[0] & 0b11111100) >> 2]; output[1] = diff --git a/test/util/stringutil.cpp b/test/util/stringutil.cpp index 7bd0f85c..2f27a243 100644 --- a/test/util/stringutil.cpp +++ b/test/util/stringutil.cpp @@ -15,3 +15,19 @@ TEST(stringutil, utf8) { std::string str2 = util::u32str2str_utf8(u32str); EXPECT_EQ(str, str2); } + +TEST(stringutil, base64) { + srand(2019); + for (size_t size = 0; size < 30; size++) { + auto bytes = std::make_unique(size); + for (int i = 0; i < size; i++) { + bytes[i] = rand(); + } + auto base64 = util::base64_encode(bytes.get(), size); + auto decoded = util::base64_decode(base64); + ASSERT_EQ(size, decoded.size()); + for (size_t i = 0; i < size; i++) { + ASSERT_EQ(bytes[i], decoded[i]); + } + } +}