Organizacja Rust Foundation opublikowała statystyki, z których wynika, że z 127 tysięcy istotnych pakietów dostępnych w katalogu crates.io, ponad 24 tysiące (19,11%) używa słowa kluczowego „unsafe” do włączenia możliwości, które dopuszczają niebezpieczną pracę z pamięcią w wybranych fragmentach kodu, takich jak dereferencjonowanie wskaźników, wywoływanie zewnętrznych funkcji lub modyfikowanie zmiennych statycznych. 34,35% pakietów dokonuje bezpośrednich wywołań funkcji z innych pakietów crate, które korzystają z trybu „unsafe”.
Zauważono, że w większości przypadków użycie trybu „unsafe” jest spowodowane wywołaniem kodu napisanego w innych językach lub używaniem bibliotek w C/C++. Pakiet z największą liczbą wywołań w trybie „unsafe” uznano za rozwijany przez firmę Microsoft pakiet crate windows, który jest opakowaniem dla API platformy Windows. Ten pakiet ma 36 milionów pobrań. Unsafe jest również używane w najpopularniejszych pakietach syn (470 milionów pobrań), proc-macro2 (354 miliony pobrań) i libc (345 milionów pobrań).
Aby zidentyfikować problemy w kodzie wykonywanym w trybie „unsafe”, projekt rozwija interpreter Miri, który pozwala na wykrywanie odwołań poza granicami buforów, użycia pamięci po jej zwolnieniu, nieprawidłowego użycia niezdarnych danych, naruszenia inwariantu typów podstawowych (np. niespójności bool z wartościami 0 lub 1), naruszenia zasad własności obiektów, występowania stanów wyścigu i wycieków pamięci.
Źródło: opennet.ru
