Subject: [Boost-bugs] [Boost C++ Libraries] #5789: Segmentation fault with serialization when register_type rearranged
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2011-08-16 19:08:07
#5789: Segmentation fault with serialization when register_type rearranged
--------------------------------------------------+-------------------------
Reporter: Krzysztof Tomaszewski <kt@â¦> | Owner: ramey
Type: Bugs | Status: new
Milestone: To Be Determined | Component: serialization
Version: Boost 1.47.0 | Severity: Problem
Keywords: |
--------------------------------------------------+-------------------------
In our project we use boost-serialization to store objects by base-class
pointer (boost::shared_ptr). We choose to register polymorphic classes by
register_type method. So we have a template of a function which contains
all class registrations like this:
template <class Archive>
void RegisterDerivedClasses(Archive& ar) {
ar.register_type((A*)0);
ar.register_type((B*)0);
ar.register_type((C*)0);
// ...
}
This function template is called on each archive object before we use it.
With development of the project we add new class registrations in this
function template.
The problem is a segmentation fault occuring in following situation:
1) our program serializes some data with boost-serialization
2) we add new class registration, so function RegisterDerivedClasses
changes to something like this:
---
template <class Archive>
void RegisterDerivedClasses(Archive& ar) {
ar.register_type((NewClass*)0);
ar.register_type((A*)0);
ar.register_type((B*)0);
ar.register_type((C*)0);
// ...
}
---
3) we recompile our project to produce the program
4) the program deserializes data produced in step 1 (no change in
serialize methods)
=================================================================================
BOST VERSION AND BUILD:
This is occuring with Boost 1.47 and we checked this is occuring as well
with 1.45.
Our boost library is prepared with following steps:
./bootstrap.sh --with-
libraries=date_time,filesystem,serialization,system,thread,signals
--prefix=/usr/local/boost/1.47
./b2 --layout=system variant=release link=static threading=multi
=================================================================================
OS PLATFORM: Ubuntu 10.10, "uname -a" gives:
Linux raU 2.6.38-10-generic-pae #44~lucid1-Ubuntu SMP Mon Jun 6 22:01:00
UTC 2011 i686 GNU/Linux
=================================================================================
GCC: "g++ -v" gives:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.5.1/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.5.1-7ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-
suffix=-4.5 --enable-shared --enable-multiarch --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin
--enable-gold --with-plugin-ld=ld.gold --enable-objc-gc --enable-
targets=all --disable-werror --with-arch-32=i686 --with-tune=generic
--enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu
--target=i686-linux-gnu
Thread model: posix
gcc version 4.5.1 (Ubuntu/Linaro 4.5.1-7ubuntu2)
=================================================================================
Compilation of the sample program:
g++ test20.cpp -I /usr/local/boost/1.47/include/ -L
/usr/local/boost/1.47/lib/ -lboost_serialization
Running sample program:
./a.out
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/5789> 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:07 UTC