【发布时间】:2026-01-28 18:20:11
【问题描述】:
在以下单元测试中使用 Botan::SecureVector 时:
void UnitTest()
{
std::vector<byte> vbData;
vbData.push_back(0x04);
vbData.push_back(0x04);
vbData.push_back(0x04);
Botan::SecureVector<Botan::byte> svData(&vbData[0], vbData.size());
CPPUNIT_ASSERT(vbData == std::vector<byte>(svData.begin(), svData.end()));
}
在尝试分配 SecureVector 时发生分段错误,因为它在构建过程中尝试释放缓冲区。
【问题讨论】:
-
您声明了一个名为
vbData的向量,然后使用了一个名为bbData的向量(第一个字母不同)。这可能是错误(是否有全局bbData?)还是只是一个错字? -
您在这里遇到的是一个错误;它在 3 月份被发现并修复(但尚未推出新的稳定版本,所以它仍然存在)。它仅在库未初始化时发生,但绝对崩溃绝不是好的行为。初始化是必要的,因为 SecureVector 希望能够访问管理锁定内存的共享池分配器。顺便说一句,如果您在使用 botan 时遇到更多问题,我可以建议您尝试使用 botan-devel 邮件列表 - 那里的人很友好,了解图书馆,而且您通常可以很快得到答案。
-
@Jack Lloyd - 非常感谢;我已经在名单上签名了。