Skip to content

Commit 14cd308

Browse files
authored
decode64: remove padding zeros (#5657)
1 parent 99ad4e5 commit 14cd308

File tree

5 files changed

+36
-4
lines changed

5 files changed

+36
-4
lines changed

source/MRMesh/MRBase64.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,21 @@ std::string encode64( const std::uint8_t * data, size_t size )
1818
return tmp;
1919
}
2020

21-
std::vector<std::uint8_t> decode64( const std::string &val )
21+
std::vector<std::uint8_t> decode64( const std::string &val )
2222
{
2323
MR_TIMER;
2424
using namespace boost::archive::iterators;
2525
using It = transform_width<binary_from_base64<std::string::const_iterator>, 8, 6>;
2626
#pragma warning(push)
2727
#pragma warning(disable:4127)
28-
return std::vector<std::uint8_t>( It( begin( val ) ), It( end( val ) ) );
28+
auto res = std::vector<std::uint8_t>( It( begin( val ) ), It( end( val ) ) );
2929
#pragma warning(pop)
30+
// remove padding zeros
31+
if ( !res.empty() && !val.empty() && val.back() == '=' )
32+
res.pop_back();
33+
if ( !res.empty() && val.size() >= 2 && val[val.size() - 2] == '=' )
34+
res.pop_back();
35+
return res;
3036
}
3137

3238
} //namespace MR

source/MRTest/MRBase64Tests.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <MRMesh/MRBase64.h>
2+
#include <MRMesh/MRGTest.h>
3+
4+
namespace MR
5+
{
6+
7+
TEST( MRMesh, Base64 )
8+
{
9+
EXPECT_EQ( decode64( "d29y" ), ( std::vector<std::uint8_t>{ 'w', 'o', 'r' } ) );
10+
EXPECT_EQ( decode64( "d28" ), ( std::vector<std::uint8_t>{ 'w', 'o' } ) );
11+
EXPECT_EQ( decode64( "d28=" ), ( std::vector<std::uint8_t>{ 'w', 'o' } ) );
12+
EXPECT_EQ( decode64( "dw" ), ( std::vector<std::uint8_t>{ 'w' } ) );
13+
EXPECT_EQ( decode64( "dw==" ), ( std::vector<std::uint8_t>{ 'w' } ) );
14+
EXPECT_EQ( decode64( "" ), ( std::vector<std::uint8_t>{} ) );
15+
16+
EXPECT_EQ( "d29y", encode64( (const std::uint8_t*)"wor", 3 ) );
17+
EXPECT_EQ( "d28=", encode64( (const std::uint8_t*)"wo", 2 ) );
18+
EXPECT_EQ( "dw==", encode64( (const std::uint8_t*)"w", 1 ) );
19+
EXPECT_EQ( "", encode64( (const std::uint8_t*)"", 0 ) );
20+
}
21+
22+
} //namespace MR
File renamed without changes.

source/MRTest/MRTest.vcxproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</ItemGroup>
1313
<ItemGroup>
1414
<ClCompile Include="MRAABBTreePointsTests.cpp" />
15+
<ClCompile Include="MRBase64Tests.cpp" />
1516
<ClCompile Include="MRBestFitTests.cpp" />
1617
<ClCompile Include="MRBezierTests.cpp" />
1718
<ClCompile Include="MRBitSetTests.cpp" />
@@ -61,7 +62,7 @@
6162
<ClCompile Include="MRCylinderApproximation.cpp" />
6263
<ClCompile Include="MRSolidOfRevolution.cpp" />
6364
<ClCompile Include="MRFillingSurface.cpp" />
64-
<ClCompile Include="BendTextAlongCurveTests.cpp" />
65+
<ClCompile Include="MRBendTextAlongCurveTests.cpp" />
6566
<ClCompile Include="MRFormatTests.cpp" />
6667
</ItemGroup>
6768
<ItemGroup>

source/MRTest/MRTest.vcxproj.filters

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
<ClCompile Include="MRDicomTests.cpp">
155155
<Filter>Source Files</Filter>
156156
</ClCompile>
157-
<ClCompile Include="BendTextAlongCurveTests.cpp">
157+
<ClCompile Include="MRBendTextAlongCurveTests.cpp">
158158
<Filter>Source Files</Filter>
159159
</ClCompile>
160160
<ClCompile Include="MRFormatTests.cpp">
@@ -163,6 +163,9 @@
163163
<ClCompile Include="MRMeshCollideTests.cpp">
164164
<Filter>Source Files</Filter>
165165
</ClCompile>
166+
<ClCompile Include="MRBase64Tests.cpp">
167+
<Filter>Source Files</Filter>
168+
</ClCompile>
166169
</ItemGroup>
167170
<ItemGroup>
168171
<None Include="..\.editorconfig" />

0 commit comments

Comments
 (0)