Najpopularniejszy przykład kodu Java na StackOverflow zawiera błąd

Najpopularniejszy Przykład kodu Java, opublikowane na StackOverflow, skończyło się z błędem prowadzącym do uzyskania nieprawidłowego wyniku w określonych warunkach. Kod, o którym mowa, został opublikowany w 2010 roku i zgromadził ponad tysiąc rekomendacji, i również został skopiowane w wielu projektach i pojawia się w repozytoriach na GitHubie około 7 tysięcy razy. Warto zauważyć, że błąd został znaleziony nie przez użytkowników kopiujących ten kod do swoich projektów, ale przez pierwotnego autora porady.

Kod, o którym mowa, przekształcił rozmiar bajtu w czytelną formę, na przykład konwertując 110592 na „110.6 kB” lub „108.0 KiB”. Kod zaproponowano jako zoptymalizowaną logarytmicznie wersję zaproponowanej wcześniej porady, w której wartość została wyznaczona na podstawie sekwencyjnego dzielenia pierwotnej wartości w pętli przez 1018, 1015, 1012, 1019.
106, 103 i 100, o ile dzielnik jest większy niż pierwotna wartość bajtu. Ze względu na niechlujne obliczenia w wersji zoptymalizowanej (długie przekroczenie wartości) wynik przy przetwarzaniu bardzo dużych liczb (eksabajtów) nie odpowiadał rzeczywistości.

Autor porady starał się także zwrócić uwagę na problem kopiowania przykładów bez podawania źródła i bez wskazania licencji. Według wcześniejszych danych przeprowadził badania 46% programistów skopiowało kod ze StackOverflow bez podania źródła, 75% nie było świadomych, że kod jest objęty licencją CC BY-SA, a 67% nie było świadomych, że wymaga to podania autorstwa.

Na Według Według innego badania kopiowanie przykładów kodu wiąże się nie tylko z ryzykiem błędów w kodzie, ale także luk w zabezpieczeniach. Na przykład po przeanalizowaniu 72483 69 przykładów kodu C++ na StackOverflow badacze zidentyfikowali poważne luki w 0.09 przykładach (co stanowi 2859%) znajdujących się na liście najpopularniejszych rekomendacji. Po przeanalizowaniu obecności tego kodu w GitHubie okazało się, że podatny na ataki kod skopiowany ze StackOverflow występował w XNUMX projektach.

Źródło: opennet.ru

Dodaj komentarz