Boost logo

Boost Users :

Subject: [Boost-users] Crash when serializing binary object to XML archive
From: Simon Fraser (smfr_at_[hidden])
Date: 2008-09-06 03:09:41


Using Boost 1.36, I'm seeing a crash when serializing a 256K malloc
block
using binary_object to an XML archive, something like this:

using namespace boost;

serialization::binary_object dataObject =
               serialization::make_binary_object(dataBlock, dataSize);
ar << serialization::make_nvp("data_contents", dataObject);

The crash is in
boost::archive::iterators::transform_width<char const*, 6, 8,
char>::fill ()

template<class Base, int BitsOut, int BitsIn, class CharType>
CharType transform_width<Base, BitsOut, BitsIn, CharType>::fill(){
    CharType retval = 0;
    unsigned int missing_bits = BitsOut;
    for(;;){
        unsigned int bcount;
        if(! m_bufferfull){
            m_buffer = * this->base_reference(); <-------- crash here
            m_bufferfull = true;
            bcount = BitsIn;
        }
        else
            ...

and the stack back up to my object serialization looks like:

#0 0x0008f12e in boost::archive::iterators::transform_width<char
const*, 6, 8, char>::fill () at transform_width.hpp:139
#1 0x0008f12e in boost::archive::iterators::transform_width<char
const*, 6, 8, char>::dereference_impl () at transform_width.hpp:71
#2 0x0008f12e in
boost::iterator_facade<boost::archive::iterators::transform_width<char
const*, 6, 8, char>, char, boost::single_pass_traversal_tag, char,
int>::operator* () at transform_width.hpp:78
#3 0x0008f12e in
dereference<boost::archive::iterators::transform_width<const char*, 6,
8, char> > [inlined] () at transform_width.hpp:137
#4 0x0008f12e in boost::archive::iterators::transform_width<char
const*, 6, 8, char>::dereference () at transform_width.hpp:635
#5 0x0008f12e in
boost
::iterator_facade
<
boost
::transform_iterator
<boost::archive::iterators::detail::from_6_bit<char>,
boost::archive::iterators::transform_width<char const*, 6, 8, char>,
boost::use_default, boost::use_default>, char,
boost::single_pass_traversal_tag, char, int>::operator* () at
transform_width.hpp:517
#6 0x0008f12e in
dereference
<
boost
::transform_iterator
<boost::archive::iterators::detail::from_6_bit<char>,
boost::archive::iterators::transform_width<const char*, 6, 8, char>,
boost::use_default, boost::use_default> > [inlined] () at
transform_width.hpp:80
#7 0x0008f12e in
boost
::transform_iterator
<boost::archive::iterators::detail::from_6_bit<char>,
boost::archive::iterators::transform_width<char const*, 6, 8, char>,
boost::use_default, boost::use_default>::dereference () at
transform_width.hpp:635
#8 0x0008f12e in
boost
::archive
::iterators
::insert_linebreaks
<
boost
::archive
::iterators
::base64_from_binary<boost::archive::iterators::transform_width<char
const*, 6, 8, char>, char>, 72, char const>::dereference () at
insert_linebreaks.hpp:517
#9 0x0008f12e in
dereference
<
boost
::archive
::iterators
::insert_linebreaks
<
boost
::archive
::iterators
::base64_from_binary<boost::archive::iterators::transform_width<const
char*, 6, 8, char>, char>, 72, const char> > [inlined] () at
insert_linebreaks.hpp:517
#10 0x0008f12e in
boost
::iterator_facade
<
boost
::archive
::iterators
::insert_linebreaks
<
boost
::archive
::iterators
::base64_from_binary<boost::archive::iterators::transform_width<char
const*, 6, 8, char>, char>, 72, char const>, char const,
boost::single_pass_traversal_tag, char const, int>::operator* () at
iterator_facade.hpp:635
#11 0x0008f12e in
copy
<
boost
::archive
::iterators
::insert_linebreaks
<
boost
::archive
::iterators
::base64_from_binary<boost::archive::iterators::transform_width<const
char*, 6, 8, char>, char>, 72, const char>,
boost::archive::iterators::ostream_iterator<char> > [inlined] () at
iterator_facade.hpp:270
#12 0x0008f12e in
copy
<
boost
::archive
::iterators
::insert_linebreaks
<
boost
::archive
::iterators
::base64_from_binary<boost::archive::iterators::transform_width<const
char*, 6, 8, char>, char>, 72, const char>,
boost::archive::iterators::ostream_iterator<char> > [inlined] () at
iterator_facade.hpp:270
#13 0x0008f12e in
boost::archive::basic_text_oprimitive<std::ostream>::save_binary
(this=0xbffff178, address=0x423000, count=262144) at libs/
serialization/src/basic_text_oprimitive.cpp:317
#14 0x000aaae4 in
boost
::archive
::xml_oarchive_impl<boost::archive::xml_oarchive>::save_binary
(this=0xbffff168, address=0x463000, count=4599808) at libs/
serialization/src/basic_text_oprimitive.cpp:317
#15 0x00054032 in
boost
::serialization::binary_object::save<boost::archive::xml_oarchive>
(this=0xbfffe730, ar=@0xbffff168) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#16 0x00054059 in
boost
::serialization::access::member_save<boost::archive::xml_oarchive,
boost::serialization::binary_object const> (ar=@0xbffff168,
t=@0xbfffe730, file_version=0) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#17 0x00054081 in
boost
::serialization::detail::member_saver<boost::archive::xml_oarchive,
boost::serialization::binary_object>::invoke (ar=@0xbffff168,
t=@0xbfffe730, file_version=0) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#18 0x000540a9 in
boost::serialization::split_member<boost::archive::xml_oarchive,
boost::serialization::binary_object> (ar=@0xbffff168, t=@0xbfffe730,
file_version=0) at libs/serialization/src/basic_text_oprimitive.cpp:317
#19 0x000540d1 in
boost
::serialization
::binary_object::serialize<boost::archive::xml_oarchive>
(this=0xbfffe730, ar=@0xbffff168, file_version=0) at libs/
serialization/src/basic_text_oprimitive.cpp:317
#20 0x000540f9 in
boost::serialization::access::serialize<boost::archive::xml_oarchive,
boost::serialization::binary_object> (ar=@0xbffff168, t=@0xbfffe730,
file_version=0) at libs/serialization/src/basic_text_oprimitive.cpp:317
#21 0x00054121 in
boost::serialization::serialize<boost::archive::xml_oarchive,
boost::serialization::binary_object> (ar=@0xbffff168, t=@0xbfffe730,
file_version=0) at libs/serialization/src/basic_text_oprimitive.cpp:317
#22 0x00054165 in
boost::serialization::serialize_adl<boost::archive::xml_oarchive,
boost::serialization::binary_object> (ar=@0xbffff168, t=@0xbfffe730,
file_version=0) at libs/serialization/src/basic_text_oprimitive.cpp:317
#23 0x0005418e in
boost
::archive::detail::save_non_pointer_type<boost::archive::xml_oarchive,
boost::serialization::binary_object>::save_only::invoke
(ar=@0xbffff168, t=@0xbfffe730) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#24 0x000541ae in
boost
::archive::detail::save_non_pointer_type<boost::archive::xml_oarchive,
boost::serialization::binary_object>::invoke (ar=@0xbffff168,
t=@0xbfffe730) at libs/serialization/src/basic_text_oprimitive.cpp:317
#25 0x000541ce in boost::archive::save<boost::archive::xml_oarchive,
boost::serialization::binary_object> (ar=@0xbffff168, t=@0xbfffe730)
at libs/serialization/src/basic_text_oprimitive.cpp:317
#26 0x000541f8 in
boost
::archive
::detail
::common_oarchive
<
boost
::archive
::xml_oarchive>::save_override<boost::serialization::binary_object
const> (this=0xbffff168, t=@0xbfffe730) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#27 0x00054242 in
boost
::archive
::basic_xml_oarchive
<
boost
::archive
::xml_oarchive>::save_override<boost::serialization::binary_object>
(this=0xbffff168, t=@0xbfffe738) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#28 0x0005428e in
boost
::archive
::detail::interface_oarchive<boost::archive::xml_oarchive>::operator<<
<boost::serialization::nvp<boost::serialization::binary_object> const>
(this=0xbffff168, t=@0xbfffe738) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#29 0x00054301 in MacTierra::Soup::save<boost::archive::xml_oarchive>
(this=0x500880, ar=@0xbffff168, version=0) at libs/serialization/src/
basic_text_oprimitive.cpp:317
#30 0x0005432b in
boost
::serialization::access::member_save<boost::archive::xml_oarchive,
MacTierra::Soup const> (ar=@0xbffff168, t=@0x500880, file_version=0)
at libs/serialization/src/basic_text_oprimitive.cpp:317
#31 0x00054353 in
boost
::serialization::detail::member_saver<boost::archive::xml_oarchive,
MacTierra::Soup>::invoke (ar=@0xbffff168, t=@0x500880, file_version=0)
at libs/serialization/src/basic_text_oprimitive.cpp:317
#32 0x0005437b in
boost::serialization::split_member<boost::archive::xml_oarchive,
MacTierra::Soup> (ar=@0xbffff168, t=@0x500880, file_version=0) at libs/
serialization/src/basic_text_oprimitive.cpp:317
#33 0x000543a3 in
MacTierra::Soup::serialize<boost::archive::xml_oarchive>
(this=0x500880, ar=@0xbffff168, file_version=0) at libs/serialization/
src/basic_text_oprimitive.cpp:317

This is on Mac OS X, using gcc 4.0, compiling for intel.

Has anyone seen this crash? Should I reduce and file a bug?

Simon


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net