We are deliberately corrupting serilazationfile.tmp (by adding newlines or unwanted data) to handle negative cases like when a file is corrupted by a chance or a file has invalid data in live environment.
In Windows, when deserializing that corrupted file, some exception is thrown and caught "unknown exception", but in Linux it is straightaway crashing, i.e. in Linux it is uncatchable.
So what is the issue in here, why is the condition uncatchable in Linux?
Tested with Boost version 1_58, x64bit ubuntu 18.05 and x64bit Windows server 2016.
We got the below callstack:-
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007f36efef7921 in __GI_abort () at abort.c:79 #2 0x00007f36edd53b21 in Vmacore::PanicExit(char const*) () from /usr/lib/vmware/libvmacore.so #3 0x00007f36edb1a75d in ?? () from /usr/lib/vmware/libvmacore.so #4 0x00007f36f08f12ac in operator new(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007f36f0931c29 in std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007f36f0932afb in std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #7 0x00007f36f0932bb4 in std::string::reserve(unsigned long) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #8 0x00007f36f0932f9c in std::string::append(unsigned long, char) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #9 0x0000000002d97876 in boost::archive::basic_binary_iprimitive<boost::archive::binary_iarchive, char, std::char_traits<char> >::load(std::string&) () #10 0x0000000002d97a35 in boost::archive::basic_binary_iarchive<boost::archive::binary_iarchive>::init() () #11 0x00000000017a4ea3 in boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive, char, std::char_traits<char> >::init (this=0x7f365d139570, flags=0) at /usr/local/include/boost/archive/binary_iarchive_impl.hpp:68 #12 0x00000000017a4182 in boost::archive::binary_iarchive_impl<boost::archive::binary_iarchive, char, std::char_traits<char> >::binary_iarchive_impl ( this=0x7f365d139570, is=..., flags=0) at /usr/local/include/boost/archive/binary_iarchive_impl.hpp:97 #13 0x00000000017a3c93 in boost::archive::binary_iarchive::binary_iarchive (this=0x7f365d139570, is=..., flags=0) at /usr/local/include/boost/archive/binary_iarchive.hpp:44 **#14 0x0000000002697c4a in CustmSerialization::Deserialization<MetaData*, std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > > ( this=0x7f365d13a0dc, object=@0x7f365d1398b0: 0xd68, fileStream=...)In CustmSerialization::Deserialization here we have deserialization logic similar to the above example, and we have catch(...) in place, but the exception is not getting caught.
Thanks in advance!