parent
c90c08ccc9
commit
256065f957
@ -72,19 +72,21 @@ std::vector<unsigned char> DecodeBase64(const std::string &input) {
|
|||||||
unsigned char *out = &ret[0];
|
unsigned char *out = &ret[0];
|
||||||
|
|
||||||
unsigned value = 0;
|
unsigned value = 0;
|
||||||
for (std::size_t i = 0; i < input.size(); i++) {
|
for (std::size_t i = 0, cnt = 0; i < input.size(); i++) {
|
||||||
|
if (input[i] == '\n' || input[i] == '\r') continue; // skip newlines
|
||||||
unsigned char d = decoding[static_cast<unsigned>(input[i])];
|
unsigned char d = decoding[static_cast<unsigned>(input[i])];
|
||||||
if (d == 255)
|
if (d == 255)
|
||||||
return ret_type();
|
return ret_type();
|
||||||
|
|
||||||
value = (value << 6) | d;
|
value = (value << 6) | d;
|
||||||
if (i % 4 == 3) {
|
if (cnt % 4 == 3) {
|
||||||
*out++ = value >> 16;
|
*out++ = value >> 16;
|
||||||
if (i > 0 && input[i - 1] != '=')
|
if (i > 0 && input[i - 1] != '=')
|
||||||
*out++ = value >> 8;
|
*out++ = value >> 8;
|
||||||
if (input[i] != '=')
|
if (input[i] != '=')
|
||||||
*out++ = value;
|
*out++ = value;
|
||||||
}
|
}
|
||||||
|
++cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.resize(out - &ret[0]);
|
ret.resize(out - &ret[0]);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user