Как я могу предотвратить (или, по крайней мере, запросить подтверждение) абсурдно большие числа от использования в качестве префикса команд?


9

Это случается не так часто, как вы думаете, но иногда бывает, и у меня даже нет кошки.

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

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


4
Просто чтобы быть уверенным, что я понимаю ваш вопрос: вы регулярно вводите по ошибке какую-то последовательность вроде 144477@@или, 99999.и хотите остановить выполнение, если число слишком велико? Я прав? (Я должен спросить, потому что это кажется немного странным, у меня никогда не было этой проблемы)
— statox

3
Почему бы не обратить внимание на то, что вы делаете?
— romainl

3
@statox да, все верно. У romainl тоже есть веская точка зрения, но она не имеет отношения к вопросу. Вопрос остается, и он может быть не таким «серьезным», как другие вопросы, но, тем не менее, это вопрос. Я просто думаю, что имеет смысл указывать верхнюю границу для предотвращения случайного отказа в обслуживании. Что касается предложения об уровнях отмены, да, это может быть уместно, если это также переполняет буфер отмены, я также не рассматривал его. (Не очень надуманный пример - у меня клавиатура на 60%, верхний ряд с границами - цифры. Я поднимаю ее рукой. Забудьте отключить ее и т. Д.)
— Стивен Лу,

4
Вы можете использовать set showcmdдля отображения клавиш, которые вы ввели в правом нижнем углу.
— Мартин Турной

1
@Carpetsmoker Я думаю, это можно было бы квалифицировать как «запрос на подтверждение», поскольку он отображается на экране. Я рекомендую добавить его в качестве ответа (вероятно, вместе с тем, как добавить его в качестве параметра по умолчанию .vimrc, чтобы ответ был полностью автономным.)
— Wildcard

Ответы:


2

Я считаю, что вы обычно можете прервать процесс повторения, отправив SIGINT ( Ctrl+C). До тех пор, пока в некоторых vimscript не выполняется действительно длинный внутренний цикл, проблем с DoS нет.

Смотрите здесь пример того, как плагин может содержать функцию, которая зацикливается в зависимости от введенного числа.

Практически для всех целей и задач этот вопрос является гипотетическим.


4
«Этот вопрос является гипотетическим» ... Нет, это не так. Мне приходилось работать над SSH на моем телефоне через соединения 2G, где я случайно пропустил нажатие клавиши или сделал несколько нажатий клавиш при вводе в ожидании, что привело к очень похожим ситуациям (возможно, не 99999, но меньшие цифры да).
— Муру

Круто, да, медленный эмулятор терминала (в зависимости от количества изменений, которые применяет vim) может усугубить проблемы, добавив задержку обработки на стороне клиента. Должен быстро добраться до Ctrl + C!
— Стивен Лу

1
Вы можете просто использовать <Esc>, вам не нужно использовать <C-c>. Разница в том, что <C-c>прерывает все, что делает Vim (например, запускает функцию), а <Esc>не делает. Вы почти никогда не захотите использовать, <C-c>если не хотите «убить» что-то.
— Мартин Турной
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.