TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
mfisoft

6 Dec 2022, 10:40

Открыть в Telegram Поделиться Пожаловаться

⚡️Буква-убийца

Продолжаем:

🖐🏼Стоп. Присваиваем int строке и всё ок?
Да, компилятор использует сигнатуру string& operator= (char c); молча приводя int к char, т.е. делает нам строку из одного символа.

Ну хорошо, а как же тогда эта строка указывает на корневую директорию?
Наверняка присвоение строке номера файлового дескриптора запишет в неё какой-то мусорный байт и всё.

Совершенно верно.

Первый открытый в программе файл обычно получает дескриптор 3 (дескрипторы 1 и 2 - это stdout и stderr соответственно).
Мы пишем (int)3 в строку, получаем там мусор и как-то с ним работаем, наверное, с ошибками, но не критично.
Но наш тест работает долго и многократно создаёт/удаляет временные директории. Каждый раз mkstemp открывает НОВЫЙ файл и возвращает НОВЫЙ дескриптор, т.к. старые файлы мы не закрываем (мы же не знали про них).
На определённой итерации mkstemp возвращает дескриптор 47, что соответствует символу '/'. Так мы получаем путь к корневой директории, используем её как временную папку, и потом рекурсивно удаляем.

Всё.
Система мертва.

Активные консоли работают, запущенные программы тоже худо-бедно работают, но никакие команды не срабатывают и подключиться к серверу больше тоже нельзя.

Зовите ремонтную бригаду... И плакальщиц🥲👩🏼

📌Итак, какие же ошибки привели к данной трагедии?
1. замена вызова одной функции на другую без проверки сигнатуры (надежда на компилятор)
2. автоматическое приведение типа (int к char) при присвоении значения строке (компилятор хотел как лучше)
3. отсутствие проверок корректности имени временного каталога ("да чё там проверять, функция элементарная!")
4. работа от имени root ("не, ну так правда удобнее, у нас все так делают...")

📌Чему нас это учит?
▪️Быть внимательнее и отнестись к данной ситуации как к уроку.
▪️Сделать всё, чтобы данная ситуация не повторилась.
▪️Никогда не повторилась.
▪️Вообще никогда.

Ну, вы уже поняли, да? 😏

#мфисофттолькополюбви
#MFISOFTTeam
#mfisoft

350 0 0 13
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot