Opened 5 years ago
Closed 5 years ago
#13050 closed Bugs (fixed)
Serialization Fails on Optional Vector
Reported by: | Owned by: | Robert Ramey | |
---|---|---|---|
Milestone: | To Be Determined | Component: | serialization |
Version: | Boost 1.64.0 | Severity: | Regression |
Keywords: | Cc: |
Description
When serializing a boost::optional with T = std::vector, it will fail to load. This is a regression in Boost 1.64 as 1.63 does not appear to exhibit the issue.
The following code will exhibit the issue:
boost::optional<std::vector<std::uint8_t>> opt{}; std::string in_str{ "22 serialization::archive 15 0 0 1 0 4 0 0 1 2 3" }; std::istringstream iss{in_str}; boost::archive::text_iarchive ia{iss}; ia >> opt;
This should set opt to a valid optional containing a vector of {0, 1, 2, 3}. However it will instead either segfault or enter an infinite loop.
The cause appears to be related to a change in boost/serialization/optional.hpp, where stack storage was changed from using detail::stack_construct to detail::stack_allocate. The error appears to come from trying to use an undefined vector object.
This was only tested on OSX using the following:
Apple LLVM version 8.1.0 (clang-802.0.42) Target: x86_64-apple-darwin16.6.0 Thread model: posix
Change History (2)
comment:1 by , 5 years ago
comment:2 by , 5 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
It seems this may be already be fixed in the latest serialization lib based on this commit:
https://github.com/boostorg/serialization/commit/632df7aab5e1fb3458ea53be2704c83462b2caa9