Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Как Telegram удалил 800 ГБ моих данных и причем тут орфография

Дата публикации: 28-08-2026 11:48:21

После очередного запуска компьютера привычные программы одна за другой перестали открываться. В папке C:\custom остались в основном пустые каталоги: исчезли проекты, программы и другие данные общим объёмом около 800 ГБ.Я начал запускать приложения по одному и смотреть, после какого действия пропадают файлы. След привёл к Telegram Desktop — мессенджер, установленный в другой папке, при каждом запуске рекурсивно очищал C:\custom.Дальше были Process Monitor, стеки вызовов, issue на GitHub и неожиданная причина в проверке орфографии. Читать далее

Основное содержимое страницы с новостью.

Уровень сложностиСредний

Время на прочтение4 мин

Охват и читатели10K

Кейс

После очередного запуска компьютера я начал открывать привычные программы. Они одна за другой не запускались, а при проверке оказывалось, что их exe‑файлы просто исчезли.

Сначала я решил, что сломалась Windows или умирает диск. Но проблема выглядела странно: папки оставались на месте, а файлы внутри них пропадали. В папке C:\custom, где у меня лежали программы, проекты и другие данные, почти ничего не осталось.

Всего там находилось около 800 ГБ.

Я начал запускать приложения по одному и смотреть, в какой момент пропадают файлы. Так я начал искать, кто именно их удаляет.

След привел к Telegram Desktop.

Как я нашёл виновника

Telegram был установлен в C:\custom\program\Telegram Desktop, поэтому сначала я подумал на ошибку обновления. Возможно, мессенджер пытался удалить свои старые файлы и заодно задевал всё, что лежало рядом.

Чтобы это проверить, я переустановил Telegram в другое место:

C:\telegram\Telegram Desktop\Telegram.exe

Папку загрузок также указал за пределами C:\custom. Затем создал тестовый файл:

C:\custom\Текстовый документ.txt

После запуска Telegram файл исчез. Я создал его заново, перезапустил мессенджер — файл снова исчез.

Получалось, что Telegram, установленный в C:\telegram, зачем‑то продолжал чистить совершенно постороннюю папку C:\custom

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

Что показал Process Monitor

Для следующего запуска я включил Process Monitor и запретил удаление тестового файла через права Windows. Telegram дошел до самого удаления, получил отказ, а в логе остался весь процесс.

Событие

Процесс и поток

Действие

672 340

Telegram.exe, PID 696, TID 5688

Открытие C:\custom

672 355

тот же PID и TID

Чтение списка файлов и папок

тот же поток

Обход вложенных папок

1 506 350

тот же PID и TID

Запрос прав Read Attributes, Delete

1 506 360

тот же PID и TID

Запрос права Delete

Между открытием C:\custom и попыткой удалить тестовый файл прошло около 7 секунд.

Стеки вызовов вели внутрь Telegram.exe. Это был не малварь и не какой‑то случайный процесс. Сам Telegram обходил все вложенные папки и удалял всё, до чего мог добраться.

С этими логами я создал issue #31170 и приложил выборку событий и стеков.

Разработчик подтвердил ошибку. Оказалось, что C:\custom удаляла проверка орфографии.

5d6afafbf099249440efd258c96a6590.pngПочему именно custom

Telegram хранит добавленные пользователем слова в файле с именем custom. За эту часть отвечает библиотека lib_spellcheck

После этого изменения внутреннее хранилище слов стало использоваться и вместе со встроенной проверкой орфографии Windows

После этого изменения внутреннее хранилище слов стало использоваться и вместе со встроенной проверкой орфографии Windows

В версии 7.1.0 изменили работу пользовательских слов со встроенной в Windows проверкой орфографии. После коммита 4929c892 код для Windows тоже начал обращаться к внутреннему файлу со словами.

Но путь к этому файлу задавался после return, который завершал функцию раньше времени.

Если сильно упростить старый код, получалось следующее:

if (IsSystemSpellchecker()) {
    return;
}

SetWorkingDirPath(DictionariesPath());

На Windows условие выполнялось, функция завершалась, а путь к словарю оставался пустым.

Дальше библиотека строила путь к пользовательскому словарю:

customWordsFile = WorkingDirPath() + "/custom";

Вместо внутреннего файла Telegram получалась строка /custom. Qt преобразовал её в папку custom в корне текущего диска — в моём случае в C:\custom

Код ожидал, что custom будет файлом. Если вместо файла там находилась папка, код считал это ошибкой и удалял её:

if (QFileInfo(path).isDir()) {
    QDir(path).removeRecursively();
}

В нормальной ситуации удалялась бы небольшая служебная папка внутри Telegram. Из‑за пустого пути код добрался до моей папки.

QDir::removeRecursively() продолжает работу, даже если часть файлов удалить не удалось. Поэтому занятые DLL оставались на месте, а остальные файлы исчезали.

Ошибка сложилась в простую цепочку:

  1. Windows‑код обратился к внутреннему словарю.

  2. Путь к словарю не был задан.

  3. Пустой путь превратился в /custom

  4. Qt превратил его в C:\custom

  5. Telegram запустил рекурсивное удаление.

Отдельная ирония в том, что коммит 40441b29, участвовавший в этой цепочке, сам исправлял другую ошибку с удалением каталогов словарей.

e6ddbc07df565c7562d1692ecdbe8503.pngКак исправили ошибку

Исправление оказалось небольшим. В коммите 9c316281 путь стали задавать до return:

SetWorkingDirPath(DictionariesPath());

if (IsSystemSpellchecker()) {
    return;
}
8fdea5b061acb5e925daad0e95096b92.png

В самой библиотеке коммитом ac399e5c добавили проверку: если путь пустой, работать со словарём нельзя.

Баг попал в релизы 7.1.0 и 7.1.1. Исправление вошло в 7.1.2. Версии с ошибкой были доступны около 66 часов.

Баг подтвердили на Windows со встроенной проверкой орфографии. На Linux и macOS именно такую цепочку действий не находили.

Что в итоге

Это была не сложная атака и не поломка диска. Telegram получил пустую строку, добавил к ней /custom и рекурсивно удалил всё, что смог.

Каждое решение по отдельности выглядело нормально: сохранить пользовательские слова, убрать каталог вместо повреждённого файла, использовать готовую функцию рекурсивного удаления. Опасными они стали вместе, потому что перед удалением никто не проверил итоговый путь.

Перед таким удалением программа должна проверить хотя бы две вещи: путь не пустой и он действительно ведёт внутрь папки приложения.

Популярность продукта и количество его пользователей от простых ошибок не защищают. Иногда между «починили пользовательский словарь» и «удалили 800 ГБ данных» находится всего несколько строк кода.

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Мошенники разработали схему взлома профилей Telegram без паролей и кодов08.7427-07-2026
2Telegram отключали "ради безопасности". Но что-то пошло не так. Бессмысленность ...-5603-07-2026
3Один против миллиарда. Telegram удалили из App Store по вине единственного человека07.5904-08-2026
4Немкин: Telegram не удаляет около 157,7 тыс. единиц противоправного контента0014-08-2025
5Давайте включим "Телеграм"! Telegram отключали "ради безопасности". Но что-то пошло ...-5605-07-2026
6Telegram сообщил о восстановлении доступа к приложению в App Store06.0804-08-2026
7Telegram был временно удалён из App Store по всему миру07.404-08-2026
8Telegram внезапно исчез из App Store по всему миру из-за одного пользователя. Дуров сделал заявление016.6704-08-2026
9Мошенники начали похищать аккаунты Telegram011.527-07-2026

Классификация: Общество. Схожих патентов: 0. Схожих новостей: 9. Тональность: 0. Информативность: 9.96. Источник: habr.com.