Кодик кратко объясняет суть статьи
Пользователь Telegram Desktop на Windows сообщил о критической ошибке в версиях 7.1.0 и 7.1.1, приведшей к удалению около 800 ГБ данных из папки C:\custom. Причина — баг в механизме проверки орфографии: из-за неправильного порядка кода путь к пользовательскому словарю оставался пустым, и приложение интерпретировало /custom как папку в корне диска. Если там находилась папка (а не файл), запускалось её рекурсивное удаление. Ошибка затронула только Windows со встроенной проверкой орфографии. Разработчики исправили проблему в версии 7.1.2, перенеся инициализацию пути и добавив защиту от пустого значения. Автор подчеркнул, что даже у популярных приложений серьёзные последствия могут возникать из-за мелких ошибок в коде. На Linux и macOS уязвимость не обнаружена.
Читайте в Telegram
|
Пользователь Telegram Desktop рассказал на «Хабре» о необычной ошибке в мессенджере, из-за которой лишился около 800 ГБ данных на компьютере с Windows.
Причиной оказался баг, связанный с проверкой орфографии: при определённых условиях Telegram мог начать рекурсивно удалять содержимое папки custom в корне диска.
Что случилось?
Как рассказал автор истории, после очередного запуска компьютера некоторые установленные программы перестали открываться — их исполняемые файлы исчезли.
- Позже выяснилось, что в папке
C:\custom, где у него хранились программы, проекты и другие данные, почти ничего не осталось. Всего там находилось около 800 ГБ файлов. Он начал запускать приложения по одному и выяснил, что файлы исчезают после запуска Telegram Desktop.
- Чтобы исключить проблему с местом установки, он переустановил мессенджер из
C:\customв другую папку, однако созданный для проверки файл внутриC:\customпосле запуска Telegram снова удалился.
- После этого пользователь изучил происходящее с помощью Process Monitor. Согласно его наблюдениям, Telegram обращался к
C:\custom, просматривал вложенные папки и пытался удалять находящиеся там файлы.

Позднее он отправил репорт о баге в репозитории Telegram Desktop на GitHub. В нём автор указал, что проблема проявлялась в версии 7.1.1, тогда как в Telegram Desktop 6.9.4 её не было.
Почему так произошло?
Причина оказалась связана с механизмом проверки орфографии. Telegram хранит добавленные пользователем слова в файле custom.

В версии 7.1.0 изменили работу пользовательского словаря со встроенной в Windows проверкой орфографии, однако путь к файлу словаря задавался уже после участка кода, который при использовании системной проверки завершал функцию. Поэтому путь оставался пустым.
Затем библиотека формировала путь к пользовательскому словарю, добавляя к пустому значению /custom. Qt интерпретировал его как папку custom в корне текущего диска — в случае автора это была C:\custom. Код ожидал обнаружить там файл, однако если по этому пути находилась папка, запускалось её рекурсивное удаление.
При этом удалялись только те файлы, к которым приложение получало необходимый доступ. Например, занятые другими процессами файлы могли остаться на месте, поскольку используемая функция QDir::removeRecursively() продолжает работу, даже если удалить некоторые элементы не удалось.
Исправлен ли баг?
Баг попал в версии Telegram Desktop 7.1.0 и 7.1.1. Для исправления разработчики перенесли установку пути к словарю до досрочного завершения функции, а в библиотеку проверки орфографии добавили дополнительную защиту от пустого пути.
Исправления вошли в Telegram Desktop 7.1.2, выпущенный 25 августа. В официальном списке изменений это описано как исправление сохранения слов при использовании системной проверки орфографии. По словам автора разбора, ошибку подтвердили на Windows со встроенной системной проверкой орфографии.
«Популярность продукта и количество его пользователей от простых ошибок не защищают. Иногда между "починили пользовательский словарь" и "удалили 800 ГБ данных" находится всего несколько строк кода», — заключил автор истории.
На Linux и macOS такую же цепочку действий не обнаружили. Более подробное описание автора истории опубликовано на «Хабре».







