2017-04-15 27 views
0

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(); 

Antwort

0

Danke für den Tipp, Serge! Wir haben bereits einen ähnlichen Fall in unserer TODO for C++ - Diagnose und werden es in Zukunft noch einmal implementieren, obwohl ich Ihnen keine Schätzungen geben kann.

Verwandte Themen