Определено ли поведение программы при переполнении stdin в Rust?
Нигде не нашел информацию о поведении прораммы в случае использования stdin().read_line().
Смутил абзац в документации:
This function is blocking and should be used carefully: it is possible for an attacker to continuously send bytes without ever sending a newline or EOF.
Можно ли как-то предотвратить такой бесконечный ввод данных?
Как это может сказаться на программе?
Определено ли ее поведение в таком случае?
можно ли прервать этот процесс?
Можно ли вывести сообщение об ошибке и продолжить выполнение программы?
Возможно я не до конца понимаю взаимодействие программы с stdin, терминалом и ОС.
Зависит ли поведение программы от этих факторов?
Заранее спасибо!
Ответы (1 шт):
Смысл этого предупреждения не в переполнении stdin, а в том, что завершение чтения данных управляется действиями пишущей стороны. Этого завершения может и не произойти. Собственно многие программы командной строки, тот же powershell большую часть времени просто ожидают ввод. Соответственно, если это может создать сложности, то следует использовать не чтение строки, а чтение с ограничением на количество байт std::io::Read::take и / или неблокирующее чтение из стандартного ввода (хотя это опять же будет управляться действиями пишущей стороны).