Cargo начал ловить невидимые символы, меняющие направление текста в исходниках
01.05.2026В сборщик пакетов добавлены две проверки по умолчанию, которые отклоняют код, содержащий символы управления направлением текста. Раньше такой код собирался как ни в чём не бывало.
Что это за символы
Они невидимы. В редакторе строка выглядит обычным кодом, но часть символов после них выводится справа налево независимо от направления окружающего текста. Специально используются в некоторых письменностях, и потому их можно встретить в коде совершенно невинно.
Чем это опасно
Классический приём — «троянский исходник». Программа читается слева направо и выглядит безобидно, но при выводе с определённым направлением текста последняя строка переворачивается и превращается в другую программу. Читающий видит не то, что выполнится.
Вторая опасность — сокрытие кода. Имя переменной может отображаться иначе, чем оно записано: в коде read, а на экране — что-то другое. Проверка глазами перестаёт работать.
Третья — невидимый перенос строки. Символ в конце строки делает так, что текст в редакторе и текст при компиляции располагаются иначе.
Почему это ловится при сборке пакета
Проверка срабатывает при попытке опубликовать крейт, а не при сборке приложения. То есть она защищает других: человек, добавляющий зависимость, не может получить код, который он не прочитал в исходнике так, как этот код выглядит на самом деле.
Проверки включены по умолчанию и зеркалят такие же проверки в самом компиляторе. То есть код с такими символами не собирается и не может быть опубликован.
Оригинал
feat(lints): Add deny-by-default text_direction_codepoint lints
Упоминаний: 1 · Просмотров: 2