Найпопулярніший приклад Java-коду на StackOverflow виявився помилкою

Найпопулярніший приклад Java-коду на StackOverflow виявився помилкою
2 хв. читання
05 грудня 2019

Найпопулярніший приклад Java-коду, опублікованого на StackOverflow, виявився з помилкою, що при певних умовах призводить до неправильного результату. Розглянутий код був розміщений у 2010 році та накопичив більше тисячі рекомендацій, а також був скопійований в багато проєктів і зустрічається в репозиторіях на GitHub близько 7 тисяч разів. Примітно, що знайшли помилку не користувачі, які копіюють даний код у свої проєкти, а початковий автор поради.

Розглянутий код здійснював перетворення розміру в байтах у форму зручну для розуміння людини, наприклад 110592 перетворював у "110.6 kB" або "108.0 KiB". Код був запропонований як оптимізований за допомогою логарифмів варіант раніше запропонованого коду, в якому величина визначалася на основі послідовного поділу вихідного значення в циклі на 1018, 1015, 1012, 1019, 106, 103 і 100, до тих пір, поки дільник більше вихідного значення в байтах. Через недбале обчислення в оптимізованому варіанті (переповнення значення long) результат роботи при обробці дуже великих чисел (ексабайт) не відповідав дійсності.

Автор поради також спробував звернути увагу на проблему копіювання прикладів без посилання на джерело і без вказівки ліцензії. За даними дослідження проведеного раніше, 46% розробників скопіювали код з StackOverflow без вказівки автора, 75% не знали, що код розповсюджується під ліцензією CC BY-SA, а 67% не знали, що це передбачає необхідність зазначення авторства.

За даними іншого дослідження, копіювання прикладів коду пов'язане не лише із ризиком наявності помилок в коді, але і вразливостей. Наприклад, проаналізувавши на StackOverflow 72483 прикладів коду на C++, дослідники виявили серйозні уразливості в 69 прикладах (що становить 0.09%), що входять в список найпопулярніших рекомендацій. Проаналізувавши потім наявність цього коду на GitHub, було виявлено, що скопійований уразливий код з StackOverflow  присутній у 2859 проєктах. 

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід