
I looked into this it looks as thought the issue is occuring in
collections_load_imp.hpp where the library version returned from
.get_library_version() does not return a value greater than 3.... or never
gets called. So in our case when loading a serialized vector item version
is never deserialized even though it is in the incoming message. I also had
one of our guys (my laptop died... long story) try calling
"set_library_version(unsigned int archive_library_version);" from
basic_iarchive on the archive such as ia.set_library_version(4) and I
believe this crashed the app with and exception. I will try this workaround
once my laptop is back as temporary work around for others until this gets
fixed may be a good alternative to a patch. Hopfully a fix will be there by
the time my laptop is resurrected.
inline void load_collection(Archive & ar, Container &s)
{
s.clear();
// retrieve number of elements
collection_size_type count;
unsigned int item_version;
ar >> BOOST_SERIALIZATION_NVP(count);
if(3 < ar.get_library_version())
ar >> BOOST_SERIALIZATION_NVP(item_version);
else
item_version = 0;
...
Also of note from basic_iarchive ..
basic_iarchive::get_library_version() const{
return pimpl->m_archive_library_version;
}
m_archive_library_version is set in the constructor of basic_iarchive_impl
..
basic_iarchive_impl(unsigned int flags) :
m_archive_library_version(ARCHIVE_VERSION()),
where ARCHIVE_VERSION is defined in basic_archive.cpp to to be 4
ARCHIVE_VERSION(){
return 4;
}
That's about all I know about the issue. I am curious to see if calling
set_library_version on the archive before deserialization of the archive
occurs works for anyone.
Brian.
On Fri, Jun 6, 2008 at 12:55 PM, Johan Råde
Johan Råde wrote:
I just ran some tests on Windows, and I can confirm the problem. Here is output from serialization of an std::vector
where the class X has an empty serialization function. Boost 1.34.1:
<v class_id="0" tracking_level="0" version="0"> <count>2</count>
0 <item class_id="1" tracking_level="1" version="0" object_id="_0"></item> <item class_id_reference="1" object_id="_1"></item> </v>Boost 1.35:
<v class_id="0" tracking_level="0" version="0"> <count>2</count> <item class_id="1" tracking_level="1" version="0" object_id="_0"></item> <item class_id_reference="1" object_id="_1"></item> </v>
This is a *major problem* for us, because we will release a new version of our app soon. The app has "Export" and "Import" functions that are implemented using Boost.Serialization. It is required that files that have been exported with one version of our app can be imported with a later version.
Is there a patch for this problem yet?
Thank you, Johan Råde
Does anyone know if the problem can be fixed by just replacing the file serialization/vector.hpp in Boost 1.35 with the Boost 1.34.1 version (but keeping the rest of 1.35)?
--Johan
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users