PVS工作室在免费后未能找到错误的使用用法

时间:2017-04-15 16:58:29

标签: pvs-studio

我正在使用sqlpp11访问数据库的小应用程序中遇到一个错误。 ASAN在免费使用后中止了该程序,因为我错误地使用了API。在试图找出问题的同时,我尝试了PVS,但没有成功。因此,我将共享代码段作为在软件中添加额外检查的机会。

错误的代码是:

Record result;  // this is the native struct
demo_dao::Record records;  // this is the generated struct
auto const & record =
    store.db (select (all_of (records)).from (records).where (record.id == static_cast<long> (id))).front ();
// free has happened now
...
// use after free happens now
result.conditions = Conditions {record.Conditions.value ()};

正确用法是:

auto result = store.db (select (all_of (records)).from (records).where (record.id == static_cast<long> id)));
auto const & record = result.front();

1 个答案:

答案 0 :(得分:0)

谢谢你的小费,塞尔!我们在TODO for C ++诊断中已经有类似的情况,并且将来会在一段时间内实现它,尽管我不能给你任何估计。