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 <rade@maths.lth.se> wrote:
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<X*> 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> <item_version>0</item_version> <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