You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For any string with size() % 4 == 1from_base64 function increments past-of-end iterator
Is this behavior expected? If this behavior is expected, then why doesn't the library provide functions for base64 validation?
MRE:
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/binary_from_base64.hpp>
#include <boost/archive/iterators/transform_width.hpp>
template <typename OutIt>
OutIt from_base64(const char* pstr, size_t size, OutIt out)
{
using namespace boost::archive::iterators;
std::vector<char> buffer; // Just for debugging
std::copy_n(pstr, size, std::back_inserter(buffer));
using It = transform_width<binary_from_base64<std::vector<char>::iterator>, 8, 6>;
return std::copy(It(buffer.begin()), It(buffer.end()), out);
}
const std::string base64str= "MTIzN"; // base64("1234567890") == "MTIzNDU2Nzg5MA=="
std::string result;
from_base64(base64str.c_str(), base64str.size(), std::back_inserter(result));
// Here i'm expecting smth like `result == "123"`, or `from_base64` throw exception (that i can wrap and return only valid part - "123")
The text was updated successfully, but these errors were encountered:
Compiler: MSVC
boost version: 1.86.0
For any string with
size() % 4 == 1
from_base64
function increments past-of-end iteratorIs this behavior expected? If this behavior is expected, then why doesn't the library provide functions for base64 validation?
MRE:
The text was updated successfully, but these errors were encountered: