Cargo начал ловить невидимые символы, меняющие направление текста в исходниках

01.05.2026

В сборщик пакетов добавлены две проверки по умолчанию, которые отклоняют код, содержащий символы управления направлением текста. Раньше такой код собирался как ни в чём не бывало.

Что это за символы

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

Чем это опасно

Классический приём — «троянский исходник». Программа читается слева направо и выглядит безобидно, но при выводе с определённым направлением текста последняя строка переворачивается и превращается в другую программу. Читающий видит не то, что выполнится.

Вторая опасность — сокрытие кода. Имя переменной может отображаться иначе, чем оно записано: в коде read, а на экране — что-то другое. Проверка глазами перестаёт работать.

Третья — невидимый перенос строки. Символ в конце строки делает так, что текст в редакторе и текст при компиляции располагаются иначе.

Почему это ловится при сборке пакета

Проверка срабатывает при попытке опубликовать крейт, а не при сборке приложения. То есть она защищает других: человек, добавляющий зависимость, не может получить код, который он не прочитал в исходнике так, как этот код выглядит на самом деле.

Проверки включены по умолчанию и зеркалят такие же проверки в самом компиляторе. То есть код с такими символами не собирается и не может быть опубликован.

Оригинал

feat(lints): Add deny-by-default text_direction_codepoint lints

Упоминаний: 1 · Просмотров: 2