Subject: [Boost-bugs] [Boost C++ Libraries] #9370: segmentation fault with serialization
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-11-12 15:13:35
#9370: segmentation fault with serialization
------------------------------+------------------------------
Reporter: florian.seidel@⦠| Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.49.0
Severity: Showstopper | Keywords:
------------------------------+------------------------------
The following minimal program crashes in Boost 1.49.0
{{{
#include <iostream>
#include <string>
#include <sstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/base_object.hpp>
class A {
public:
A() { }
virtual ~A() { }
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
}
};
class C : public A { };
class B : public A {
public:
B() {
}
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & boost::serialization::base_object<A>(*this);
}
};
BOOST_CLASS_VERSION(A,1)
BOOST_CLASS_VERSION(B,2)
BOOST_CLASS_VERSION(C,3)
int main() {
using namespace std;
cout << "Start boost-serialization test\n\n";
boost::shared_ptr<A> p1( new B );
boost::shared_ptr<A> p2;
ostringstream os(ios_base::out|ios_base::binary);
{
boost::archive::binary_oarchive oar(os);
oar.register_type((C*)0);
oar.register_type((B*)0);
oar & p1;
}
const string data(os.str());
cout << "Serialization done, data size [bytes]: " << data.size()
<< endl;
istringstream is(data, ios_base::in|ios_base::binary);
{
boost::archive::binary_iarchive iar(is);
iar.register_type((B*)0);
iar & p2;
}
cout << "Deserialization done\n";
return 0;
}
}}}
{{{
Thread 1 (Thread 0x7ffff7fcc740 (LWP 3383)):
#0 0x00007ffff7ba9c3a in
boost::archive::detail::basic_iarchive_impl::load_pointer(boost::archive::detail::basic_iarchive&,
void*&, boost::archive::detail::basic_pointer_iserializer const*,
boost::archive::detail::basic_pointer_iserializer const*
(*)(boost::serialization::extended_type_info const&)) () from
/usr/lib64/libboost_serialization.so.1.49.0
No symbol table info available.
#1 0x0000000000448b31 in
boost::archive::detail::load_pointer_type<boost::archive::binary_iarchive>::invoke<A*>
(ar=..., t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>) at
/usr/include/boost/archive/detail/iserializer.hpp:524
bpis_ptr = 0x664d90
newbpis_ptr = 0x7ffff7fd0000
#2 0x0000000000448a11 in
boost::archive::load<boost::archive::binary_iarchive, A*> (ar=...,
t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>) at
/usr/include/boost/archive/detail/iserializer.hpp:592
No locals.
#3 0x0000000000448964 in
boost::archive::detail::common_iarchive<boost::archive::binary_iarchive>::load_override<A*>
(this=0x7fffffffd4d0, t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>) at
/usr/include/boost/archive/detail/common_iarchive.hpp:66
No locals.
#4 0x00000000004488a9 in
boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>::load_override<A*>
(this=0x7fffffffd4d0, t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>, version=0) at
/usr/include/boost/archive/basic_binary_iarchive.hpp:70
No locals.
#5 0x00000000004487d3 in
boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive,
char, std::char_traits<char> >::load_override<A*> (this=0x7fffffffd4d0,
t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>) at
/usr/include/boost/archive/binary_iarchive_impl.hpp:50
No locals.
#6 0x00000000004486de in
boost::archive::detail::interface_iarchive<boost::archive::binary_iarchive>::operator>><A*>
(this=0x7fffffffd4d0, t=@0x7fffffffd158: 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>) at
/usr/include/boost/archive/detail/interface_iarchive.hpp:60
No locals.
#7 0x00000000004485df in
boost::serialization::nvp<A*>::load<boost::archive::binary_iarchive>
(this=0x7fffffffd190, ar=...) at
/usr/include/boost/serialization/nvp.hpp:87
No locals.
#8 0x000000000044850e in
boost::serialization::access::member_load<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> > (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/access.hpp:101
No locals.
#9 0x0000000000448266 in
boost::serialization::detail::member_loader<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> >::invoke (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/split_member.hpp:54
No locals.
#10 0x00000000004480e3 in
boost::serialization::split_member<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> > (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/split_member.hpp:69
No locals.
#11 0x000000000044802b in
boost::serialization::nvp<A*>::serialize<boost::archive::binary_iarchive>
(this=0x7fffffffd190, ar=..., file_version=0) at
/usr/include/boost/serialization/nvp.hpp:89
No locals.
#12 0x0000000000447de1 in
boost::serialization::access::serialize<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> > (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/access.hpp:118
No locals.
#13 0x0000000000447b8e in
boost::serialization::serialize<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> > (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/serialization.hpp:69
No locals.
#14 0x0000000000447a08 in
boost::serialization::serialize_adl<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> > (ar=..., t=..., file_version=0) at
/usr/include/boost/serialization/serialization.hpp:128
v = {<boost::totally_ordered1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > > >> =
{<boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::totally_ordered2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::less_than_comparable2<boost::serialization::version_type,
unsigned int,
boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::detail::empty_base<boost::serialization::version_type>> = {<No
data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
<No data fields>}, <No data fields>}, <No data fields>}, t = 0}
#15 0x000000000044784a in
boost::archive::detail::load_non_pointer_type<boost::archive::binary_iarchive>::load_only::invoke<boost::serialization::nvp<A*>
> (ar=..., t=...) at /usr/include/boost/archive/detail/iserializer.hpp:373
No locals.
#16 0x0000000000447369 in
boost::archive::detail::load_non_pointer_type<boost::archive::binary_iarchive>::invoke<boost::serialization::nvp<A*>
const> (ar=..., t=...) at
/usr/include/boost/archive/detail/iserializer.hpp:439
No locals.
#17 0x0000000000446d51 in
boost::archive::load<boost::archive::binary_iarchive,
boost::serialization::nvp<A*> const> (ar=..., t=...) at
/usr/include/boost/archive/detail/iserializer.hpp:592
No locals.
#18 0x0000000000446628 in
boost::archive::detail::common_iarchive<boost::archive::binary_iarchive>::load_override<boost::serialization::nvp<A*>
const> (this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/detail/common_iarchive.hpp:66
No locals.
#19 0x0000000000445f41 in
boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>::load_override<boost::serialization::nvp<A*>
const> (this=0x7fffffffd4d0, t=..., version=0) at
/usr/include/boost/archive/basic_binary_iarchive.hpp:70
No locals.
#20 0x000000000044575d in
boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive,
char, std::char_traits<char>
>::load_override<boost::serialization::nvp<A*> const>
(this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/binary_iarchive_impl.hpp:50
No locals.
#21 0x0000000000444f38 in
boost::archive::detail::interface_iarchive<boost::archive::binary_iarchive>::operator>><boost::serialization::nvp<A*>
const> (this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/detail/interface_iarchive.hpp:60
No locals.
#22 0x0000000000444bba in
boost::serialization::load<boost::archive::binary_iarchive, A> (ar=...,
t=..., file_version=1) at
/usr/include/boost/serialization/shared_ptr.hpp:137
r = 0x4403a6
<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >
>::less_than_comparable1()+24>
#23 0x000000000044471a in
boost::serialization::free_loader<boost::archive::binary_iarchive,
boost::shared_ptr<A> >::invoke (ar=..., t=..., file_version=1) at
/usr/include/boost/serialization/split_free.hpp:58
v = {<boost::totally_ordered1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > > >> =
{<boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::totally_ordered2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::less_than_comparable2<boost::serialization::version_type,
unsigned int,
boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::detail::empty_base<boost::serialization::version_type>> = {<No
data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
<No data fields>}, <No data fields>}, <No data fields>}, t = 1}
#24 0x00000000004444bb in
boost::serialization::split_free<boost::archive::binary_iarchive,
boost::shared_ptr<A> > (ar=..., t=..., file_version=1) at
/usr/include/boost/serialization/split_free.hpp:74
No locals.
#25 0x0000000000444355 in
boost::serialization::serialize<boost::archive::binary_iarchive, A>
(ar=..., t=..., file_version=1) at
/usr/include/boost/serialization/shared_ptr.hpp:171
No locals.
#26 0x0000000000443fcc in
boost::serialization::serialize_adl<boost::archive::binary_iarchive,
boost::shared_ptr<A> > (ar=..., t=..., file_version=1) at
/usr/include/boost/serialization/serialization.hpp:128
v = {<boost::totally_ordered1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::less_than_comparable1<boost::serialization::version_type,
boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > > >> =
{<boost::equality_comparable1<boost::serialization::version_type,
boost::totally_ordered2<boost::serialization::version_type, unsigned int,
boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::totally_ordered2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::less_than_comparable2<boost::serialization::version_type,
unsigned int,
boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> > >> =
{<boost::equality_comparable2<boost::serialization::version_type, unsigned
int, boost::detail::empty_base<boost::serialization::version_type> >> =
{<boost::detail::empty_base<boost::serialization::version_type>> = {<No
data fields>}, <No data fields>}, <No data fields>}, <No data fields>},
<No data fields>}, <No data fields>}, <No data fields>}, t = 1}
#27 0x0000000000443bd5 in
boost::archive::detail::iserializer<boost::archive::binary_iarchive,
boost::shared_ptr<A> >::load_object_data (this=0x664ea0, ar=...,
x=0x7fffffffd7f0, file_version=1) at
/usr/include/boost/archive/detail/iserializer.hpp:188
No locals.
#28 0x00007ffff7ba90ae in
boost::archive::detail::basic_iarchive::load_object(void*,
boost::archive::detail::basic_iserializer const&) () from
/usr/lib64/libboost_serialization.so.1.49.0
No symbol table info available.
#29 0x00000000004439f4 in
boost::archive::detail::load_non_pointer_type<boost::archive::binary_iarchive>::load_standard::invoke<boost::shared_ptr<A>
> (ar=..., t=...) at /usr/include/boost/archive/detail/iserializer.hpp:387
x = 0x7fffffffd7f0
#30 0x0000000000443856 in
boost::archive::detail::load_non_pointer_type<boost::archive::binary_iarchive>::invoke<boost::shared_ptr<A>
> (ar=..., t=...) at /usr/include/boost/archive/detail/iserializer.hpp:439
No locals.
#31 0x0000000000442fbe in
boost::archive::load<boost::archive::binary_iarchive, boost::shared_ptr<A>
> (ar=..., t=...) at /usr/include/boost/archive/detail/iserializer.hpp:592
No locals.
#32 0x00000000004428f2 in
boost::archive::detail::common_iarchive<boost::archive::binary_iarchive>::load_override<boost::shared_ptr<A>
> (this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/detail/common_iarchive.hpp:66
No locals.
#33 0x0000000000442597 in
boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>::load_override<boost::shared_ptr<A>
> (this=0x7fffffffd4d0, t=..., version=0) at
/usr/include/boost/archive/basic_binary_iarchive.hpp:70
No locals.
#34 0x0000000000441e75 in
boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive,
char, std::char_traits<char> >::load_override<boost::shared_ptr<A> >
(this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/binary_iarchive_impl.hpp:50
No locals.
#35 0x0000000000441734 in
boost::archive::detail::interface_iarchive<boost::archive::binary_iarchive>::operator>><boost::shared_ptr<A>
> (this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/detail/interface_iarchive.hpp:60
No locals.
#36 0x00000000004412a3 in
boost::archive::detail::interface_iarchive<boost::archive::binary_iarchive>::operator&<boost::shared_ptr<A>
> (this=0x7fffffffd4d0, t=...) at
/usr/include/boost/archive/detail/interface_iarchive.hpp:67
No locals.
#37 0x000000000043fb6f in main () at
/import/home2/seidel/test/BoostSerialize/main.cpp:61
iar =
{<boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive,
char, std::char_traits<char> >> =
{<boost::archive::basic_binary_iprimitive<boost::archive::binary_iarchive,
char, std::char_traits<char> >> = {m_sb = @0x7fffffffd680, archive_locale
= {px = 0x665740}, locale_saver = {<boost::noncopyable_::noncopyable> =
{<No data fields>}, s_save_ = @0x7fffffffd680, a_save_ = {static none = 0,
static ctype = 1, static numeric = 2, static collate = 4, static time = 8,
static monetary = 16, static messages = 32, static all = 63, _M_impl =
0x7ffff7b5caa0, static _S_classic = <optimized out>, static _S_global =
<optimized out>, static _S_categories = <optimized out>, static _S_once =
<optimized out>}}},
<boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>> =
{<boost::archive::detail::common_iarchive<boost::archive::binary_iarchive>>
= {<boost::archive::detail::basic_iarchive> = {<No data fields>},
<boost::archive::detail::interface_iarchive<boost::archive::binary_iarchive>>
= {<No data fields>}, <No data fields>}, <No data fields>}, <No data
fields>}, <boost::archive::detail::shared_ptr_helper> = {m_pointers = 0x0,
m_pointers_132 = 0x0}, <No data fields>}
p2 = {px = 0x0, pn = {pi_ = 0x0}}
os = <incomplete type>
data =
"\026\000\000\000\000\000\000\000serialization::archive\t\000\004\b\004\b\001\000\000\000\000\001\000\000\000\001\000\001\002\000\000\000\000\000\000\000\001\001\000\000\000\001\000\000"
is = <incomplete type>
p1 = {px = 0x665700, pn = {pi_ = 0x665720}}
}}}
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/9370> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:14 UTC