Boost能保证解现实化的安全性吗?

问题描述 投票:0回答:1

例如,客户端序列化

std::vector
std::unordered_map
boost::optional
std::shared_ptr
或其他序列化机制直接在 Boost 中布局的类型,然后将其发送到服务器。服务器接收此数据包并将其反序列化,如有必要,捕获
boost::archive::archive_exception
并丢弃该数据包。

这种方法是否能保证服务器在尝试反序列化时(在 try 块内)或之后使用反序列化结构时不会因某些

SIGSEGV
而崩溃,即使客户端上的人非常努力?c++

c++ boost boost-serialization
1个回答
0
投票

不,没有任何保证。

如果你有

vector<int>
那么它不会崩溃,因为它的内容是简单可构造的,错误的大小会抛出异常,对于其他容器也是如此,但是如果你有
vector<CustomClass>
,你的
CustomClass
构造函数或反序列化函数可能崩溃然后它就会崩溃。

也不能保证

vector<int>
vector<CustomClass>
的内容是正确的,它们可以被篡改,唯一的保证是一旦函数返回,您将拥有一个有效的
std::vector
,即:如果它的大小是 1 那么你可以访问第一个元素而不会崩溃。

您需要为自定义类型编写安全的反序列化代码,并且需要在反序列化后验证对象是否包含有效数据。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.