Kaydet (Commit) c4475946 authored tarafından Fridrich Štrba's avatar Fridrich Štrba

Proper fix for remove_whitespace iterator and older boost

The previous "fix" was resulting in exceptions in some vdx files.

Change-Id: I961560b66bc29660daca54e39f14f612bbb50e34
üst eb25bb6d
--- a/src/lib/libvisio_utils.cpp --- a/src/lib/libvisio_utils.cpp
+++ b/src/lib/libvisio_utils.cpp +++ b/src/lib/libvisio_utils.cpp
@@ -33,7 +33,6 @@ @@ -123,14 +123,15 @@ double libvisio::readDouble(WPXInputStream *input)
#include "libvisio_utils.h" return tmpUnion.d;
}
#include <boost/archive/iterators/binary_from_base64.hpp> -void libvisio::appendFromBase64(WPXBinaryData &data, const unsigned char *base64String, size_t base64StringLength)
-#include <boost/archive/iterators/remove_whitespace.hpp> +void libvisio::appendFromBase64(WPXBinaryData &data, const unsigned char *base64Data, size_t base64DataLength)
#include <boost/archive/iterators/transform_width.hpp>
uint8_t libvisio::readU8(WPXInputStream *input)
@@ -126,8 +125,7 @@ double libvisio::readDouble(WPXInputStream *input)
void libvisio::appendFromBase64(WPXBinaryData &data, const unsigned char *base64String, size_t base64StringLength)
{ {
+ std::string base64String((const char*)base64Data, base64DataLength);
typedef boost::archive::iterators::transform_width< typedef boost::archive::iterators::transform_width<
- boost::archive::iterators::binary_from_base64< boost::archive::iterators::binary_from_base64<
- boost::archive::iterators::remove_whitespace< const char * > >, 8, 6 > base64_decoder; - boost::archive::iterators::remove_whitespace< const char * > >, 8, 6 > base64_decoder;
+ boost::archive::iterators::binary_from_base64< const char * >, 8, 6 > base64_decoder; + boost::archive::iterators::remove_whitespace< std::string::const_iterator > >, 8, 6 > base64_decoder;
std::vector<unsigned char> buffer; std::vector<unsigned char> buffer;
std::copy(base64_decoder(base64String), base64_decoder(base64String + base64StringLength), std::back_inserter(buffer)); - std::copy(base64_decoder(base64String), base64_decoder(base64String + base64StringLength), std::back_inserter(buffer));
+ std::copy(base64_decoder(base64String.begin()), base64_decoder(base64String.end()), std::back_inserter(buffer));
if (!buffer.empty())
data.append(&buffer[0], buffer.size());
--- a/src/lib/libvisio_utils.h
+++ b/src/lib/libvisio_utils.h
@@ -98,7 +98,7 @@ uint64_t readU64(WPXInputStream *input);
double readDouble(WPXInputStream *input);
-void appendFromBase64(WPXBinaryData &data, const unsigned char *base64String, size_t base64StringLength);
+void appendFromBase64(WPXBinaryData &data, const unsigned char *base64Data, size_t base64DataLength);
const ::WPXString getColourString(const Colour &c);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment