Wie kann ich verhindern (oder zumindest zur Bestätigung auffordern), dass absurd große Zahlen zum Präfixieren von Befehlen verwendet werden?


9

Es kommt nicht so oft vor, wie man denkt, aber es kommt gelegentlich vor, und ich besitze nicht einmal eine Katze.

Grundsätzlich ist es möglich, Vim versehentlich zu befehlen, eine Aufgabe mehrere tausend, Millionen oder sogar milliardenfach auszuführen, wenn Sie die Zahlenreihe oder das Nummernfeld zerdrücken und dann zufällig eine Tastenkombination drücken, die einen wiederholbaren Befehl auslöst. Dies gerät leicht außer Kontrolle und kann zu Datenverlust führen.

Ich frage mich also, ob der Quellcode eine Konfiguration oder etwas enthält, das wir ändern können, um als Überprüfung der Integrität zu dienen und diese Art von DoS zu verhindern.


4
Nur um sicherzugehen, dass ich Ihre Frage verstehe: Sie tippen regelmäßig versehentlich eine Sequenz wie 144477@@oder 99999.und möchten diese Ausführungen stoppen, wenn die Anzahl zu groß ist? Habe ich recht? (Ich muss fragen, weil mir das ein bisschen komisch vorkommt, ich hatte dieses Problem nie)
statox

3
Warum nicht ... achten Sie darauf, was Sie tun?
Romainl

3
@ Statistik ja, das stimmt. Romainl hat auch einen gültigen Punkt, aber es scheint für die Frage irrelevant. Die Frage bleibt bestehen und ist möglicherweise nicht so "ernst" wie andere Fragen, aber dennoch eine Frage. Ich halte es einfach für sinnvoll, eine Obergrenze festlegen zu können, um ein versehentliches Denial-of-Service zu verhindern. Was den Vorschlag zu Undolevels betrifft, ja, das kann relevant sein, wenn dieser Überlauf auch den Puffer rückgängig macht. Ich hatte ihn auch nicht berücksichtigt. (Ein nicht so ausgeklügeltes Beispiel - Ich habe eine 60% -Tastatur, die obere Randreihe besteht aus Zahlen. Ich nehme sie mit der Hand auf. Vergessen Sie, den Netzstecker zu ziehen. Usw.)
Steven Lu

4
Mit können set showcmdSie die eingegebenen Tasten in der unteren rechten Ecke anzeigen.
Martin Tournoij

1
@Carpetsmoker Ich denke, das wäre eine "Aufforderung zur Bestätigung", da es auf dem Bildschirm angezeigt wird. Ich empfehle, es als Antwort hinzuzufügen (wahrscheinlich zusammen mit dem Hinzufügen als Standardoption in .vimrc, damit die Antwort vollständig in sich geschlossen ist.)
Wildcard

Antworten:


2

Ich finde, dass Sie normalerweise in der Lage sind, den Wiederholungsprozess durch Senden eines SIGINT ( Ctrl+C) zu unterbrechen . Solange in einigen Vimskripten keine wirklich lange innere Schleife ausgeführt wird, gibt es keine DoS-Bedenken.

Sehen Sie hier ein Beispiel für ein Plugin enthalten eine Funktion , die auf die eingegebene Nummer Schleifen abhängig.

In fast jeder Hinsicht ist dieses Problem hier hypothetisch.


4
"Dieses Problem ist hypothetisch" ... Nein, ist es nicht. Ich musste auf meinem Telefon über 2G-Verbindungen an SSH arbeiten, wobei ich versehentlich einen Tastenanschlag verpasst oder mehrere Tastenanschläge ausgeführt habe, während ich erwartungsvoll tippte, was zu sehr ähnlichen Situationen führte (möglicherweise nicht 99999, aber kleinere Zahlen ja).
Muru

Cool, ja, ein langsamer Terminalemulator (abhängig von der Menge an Änderungen, die vim anwendet) kann Probleme verschlimmern, indem er die Verarbeitungsverzögerung auf der Clientseite hinzufügt. Muss schnell zu Strg + C kommen!
Steven Lu

1
Sie können nur verwenden <Esc>, Sie müssen nicht verwenden <C-c>. Der Unterschied besteht darin, dass <C-c>alles abgebrochen wird, was Vim tut (z. B. eine Funktion ausführen), und <Esc>dies nicht tut. Sie möchten fast nie verwenden, es <C-c>sei denn, Sie möchten etwas "töten".
Martin Tournoij
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.