Сайт StackOverflow – популярная система вопросов и ответов о программировании. На этом ресурсе можно найти (или хотя бы попробовать!) решение практически любой проблемы. Но не все советы коллег одинаково полезны: в самом цитируемом куске кода на Java, представленном на StackOverflow, обнаружили серьезный баг.
Кто создал самый цитируемый фрагмент Java-кода
В сентябре 2010 года Андреас Лундблад опубликовал Java-сниппет в ответ на вопрос другого пользователя на StackOverflow. Сниппет преобразовывал большие количества байт в формат, удобный для чтения людьми: к примеру, 123 456 789 байт в 123,5 МБ.
Сегодня Лундблад – один из самых известных Java-разработчиков в мире и авторитетный представитель сообщества StackOverflow. Лундблад работает в компании Palantir, основанной выходцами из PayPal. Компания разрабатывает софт для хедж-фондов, инвестиционных банков и спецслужб по всему миру.
В чем проблема
Сниппет Лундблада назвали самым цитируемым в научной статье, опубликованной в 2018 году. Эксперты подсчитали, что его используют в 6 тыс. Java-проектов, размещенных на GitHub. Это далеко не все проекты – есть и другие хостинги, к тому же не все разработчики выкладывают свой код в открытый доступ.
Баг в коде нашел сам Лундблад. Он рассказал, что заметил проблему, когда вчитался в текст упомянутой научной статьи. Разработчик обнаружил, что с самого начала неправильно преобразовывал число байт. Из-за этого проекты, которые используют его сниппет, могли работать неправильно.
Лундблад подчеркнул: баг был тривиальным, и действительно странно, что девять лет на него никто не обращал внимания. Но последствия ошибки невелики – пользователи могли заметить небольшие неточности при определении размеров файлов, но, скорее всего списывали их на погрешности округления.
Гораздо хуже было, если бы в коде нашли проблему с безопасностью, добавил Лундблад. Вполне возможно, что в такой ситуации разработчикам понадобились бы годы, чтобы исправить свои проекты и закрыть уязвимости.
Что делать
Лундблад уже подготовил исправленную версию сниппета и отредактировал свой ответ. В новом коде количество байт определяется корректно. Если вы тоже использовали этот сниппет – замените код в проекте на новую версию. Это избавит от возможных неточностей.
Лундблад напомнил: часто код со StackOverflow и других сайтов копируют без указания авторства. Когда в таких фрагментах находят баги, то разработчики, внедрившие код таким образом, могут и не узнать об этом. А значит, их проекты продолжат существовать с ошибками.