【问题标题】:Botan::SecureVector - Destructor called in Constructor?Botan::SecureVector - 在构造函数中调用析构函数?
【发布时间】: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 - 非常感谢;我已经在名单上签名了。

标签: c++ botan


【解决方案1】:

添加行:

LibraryInitializer botanInit;

发挥作用。

在我看来这是一种奇怪的行为,所以我想我应该发布它。

【讨论】: