Ich hatte einen Fehler in meiner kleinen App, die sqlpp11 verwendet, um auf die Datenbank zuzugreifen. ASAN hat das Programm mit einer Benutzung nach free abgebrochen, weil ich die API falsch benutzt habe. Während ich versuchte, die Probleme herauszufinden, habe ich PVS ohne Erfolg versucht. Ich teile daher das Code-Snippet als eine Gelegenheit, um eine zusätzliche Überprüfung in Ihrer Software hinzuzufügen.PVS Studio findet keine falsche Verwendung der Verwendung nach freien
Der falsche Code war:
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()};
Die korrekte Verwendung ist:
auto result = store.db (select (all_of (records)).from (records).where (record.id == static_cast<long> id)));
auto const & record = result.front();