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