[Boost-bugs] [Boost C++ Libraries] #13354: xml_iarchive destructor calls abort()

Subject: [Boost-bugs] [Boost C++ Libraries] #13354: xml_iarchive destructor calls abort()
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2017-12-20 13:52:47


#13354: xml_iarchive destructor calls abort()
------------------------------+---------------------------
 Reporter: anonymous | Owner: Robert Ramey
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: serialization
  Version: Boost 1.66.0 | Severity: Problem
 Keywords: |
------------------------------+---------------------------
 In the following Unit Test from VS2017 15.5.2 with Boost 1.66.0 from
 vcpkg, boost::archive::xml_iarchive() is successfully used to load an
 integer. When it goes out of scope, its destructor calls abort().

 {{{
 #include "stdafx.h"
 #include "CppUnitTest.h"

 using namespace Microsoft::VisualStudio::CppUnitTestFramework;

 #include <boost/archive/archive_exception.hpp>
 #include <boost/serialization/variant.hpp>

 #include <boost/archive/xml_iarchive.hpp>
 #include <boost/archive/xml_oarchive.hpp>

 #include <boost/serialization/split_member.hpp>

 namespace UtilityLibTest
 {
     class XmlArchiveTest
     {
     public:
         XmlArchiveTest() { m_value = 4; }

         int Value() const { return m_value; }
         void Value(const int v) { m_value = v; }
     private:
         friend class boost::serialization::access;

         void load(boost::archive::xml_iarchive & ar, unsigned int version)
         {
             ar & BOOST_SERIALIZATION_NVP(m_value);
         }
         void save(boost::archive::xml_oarchive & ar, unsigned int version)
 const
         {
             ar & BOOST_SERIALIZATION_NVP(m_value);
         }
         BOOST_SERIALIZATION_SPLIT_MEMBER()

     protected:
         int m_value;
     };

     TEST_CLASS(UnitTest1)
     {
     public:

         TEST_METHOD(XmlArchive_SaveLoad)
         {
             XmlArchiveTest store;

             // save block

             std::stringstream xml(std::stringstream::out);
             boost::archive::xml_oarchive archive(xml);

             archive & BOOST_SERIALIZATION_NVP(store);

             xml.flush();

             auto xml1 = xml.str();

             store.Value(234);

             // load block

             std::stringstream xml2;

             xml2 << xml1;

             boost::archive::xml_iarchive archive2(xml2);

             archive2 & BOOST_SERIALIZATION_NVP(store);

             Assert::AreEqual(4, store.Value(), L"4 != store.Value");
         }

     };
 }

 }}}

 Call stack

 {{{
> ucrtbased.dll!issue_debug_notification(const wchar_t * const
 message) Line 28 C++ Non-user code. Symbols loaded.
         ucrtbased.dll!__acrt_report_runtime_error(const wchar_t * message)
 Line 154 C++ Non-user code. Symbols loaded.
         ucrtbased.dll!abort() Line 51 C++ Non-user code. Symbols
 loaded.
         ucrtbased.dll!terminate() Line 59 C++ Non-user code.
 Symbols loaded.
         vcruntime140d.dll!FindHandler(EHExceptionRecord * pExcept,
 EHRegistrationNode * pRN, _CONTEXT * pContext, void * pDC, const
 _s_FuncInfo * pFuncInfo, unsigned char recursive, int CatchDepth,
 EHRegistrationNode * pMarkerRN) Line 627 C++ Non-user code. Symbols
 loaded.
         vcruntime140d.dll!__InternalCxxFrameHandler(EHExceptionRecord *
 pExcept, EHRegistrationNode * pRN, _CONTEXT * pContext, void * pDC, const
 _s_FuncInfo * pFuncInfo, int CatchDepth, EHRegistrationNode * pMarkerRN,
 unsigned char recursive) Line 347 C++ Non-user code. Symbols
 loaded.
         vcruntime140d.dll!__CxxFrameHandler(EHExceptionRecord * pExcept,
 EHRegistrationNode * pRN, void * pContext, void * pDC) Line 219 C++
 Non-user code. Symbols loaded.
         ntdll.dll!ExecuteHandler2_at_20() Unknown Non-user code. Symbols
 loaded.
         ntdll.dll!ExecuteHandler_at_20() Unknown Non-user code. Symbols
 loaded.
         ntdll.dll!_KiUserExceptionDispatcher_at_8() Unknown Non-user
 code. Symbols loaded.
         KernelBase.dll!_RaiseException_at_16() Unknown Non-user code.
 Symbols loaded.
         vcruntime140d.dll!_CxxThrowException(void * pExceptionObject,
 const _s__ThrowInfo * pThrowInfo) Line 136 C++ Non-user code.
 Symbols loaded.
         boost_serialization-vc141-mt-gd-x32-1_66.dll!0fe82f45() Unknown No
 symbols loaded.
         [Frames below may be incorrect and/or missing, no symbols loaded
 for boost_serialization-vc141-mt-gd-x32-1_66.dll] Annotated
 Frame
         boost_serialization-vc141-mt-gd-x32-1_66.dll!0fec45ad() Unknown No
 symbols loaded.
         boost_serialization-vc141-mt-gd-x32-1_66.dll!0fec72fc() Unknown No
 symbols loaded.
         boost_serialization-vc141-mt-gd-x32-1_66.dll!0fec7d33() Unknown No
 symbols loaded.
 UnitTestsUtilityLib.dll!boost::archive::xml_iarchive::~xml_iarchive() Line
 129 C++ Symbols loaded.
 UnitTestsUtilityLib.dll!UtilityLibTest::UnitTest1::XmlArchive_SaveLoad()
 Line 72 C++ Symbols loaded.
 }}}

-- 
Ticket URL: <https://svn.boost.org/trac10/boost/ticket/13354>
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-12-20 14:00:20 UTC