Come posso impedire (o almeno richiedere di confermare) l'uso di numeri assurdamente grandi per aggiungere un prefisso ai comandi?


9

Non succede così spesso come pensi, ma succede occasionalmente e non possiedo nemmeno un gatto.

Fondamentalmente se si schiaccia la riga numerica o il tastierino numerico e poi si colpisce un keycombo che attiva un comando ripetibile, è possibile inavvertitamente comandare a Vim di eseguire un'attività diverse migliaia, milioni o addirittura miliardi di volte. Questo facilmente sfugge al controllo e può causare la perdita di dati.

Quindi mi chiedo se ci sia una configurazione o qualcosa nel codice sorgente che possiamo modificare per servire come controllo di integrità per prevenire questo tipo di DoS.


4
Solo per essere sicuro di aver compreso la tua domanda: digiti regolarmente per errore alcune sequenze come 144477@@o 99999.e vuoi interrompere quelle esecuzioni quando il numero è troppo grande? Ho ragione? (Devo chiedere perché mi sembra un po 'strano, non ho mai avuto questo problema)
statox

3
Perché non ... presta attenzione a quello che fai?
Romainl

3
@statox sì, esatto. anche romainl ha un punto valido, ma sembra irrilevante per la domanda. La domanda rimane e potrebbe non essere "seria" come altre domande, ma è comunque una domanda. Penso semplicemente che abbia senso essere in grado di specificare un limite superiore per evitare la negazione accidentale del servizio. Per quanto riguarda il suggerimento sugli undolevels, sì, che può essere rilevante se anche questo overflow annulla il buffer, non l'ho nemmeno considerato. (Un esempio non troppo inventato - Ho una tastiera al 60%, la riga del bordo superiore è composta da numeri. La raccolgo con la mano. Dimentica di scollegarlo. Ecc.)
Steven Lu

4
Puoi usare set showcmdper mostrare i tasti digitati nell'angolo in basso a destra.
Martin Tournoij,

1
@Carpetsmoker Penso che si qualificherebbe come un "prompt per confermare" poiché viene visualizzato sullo schermo. Consiglio di aggiungerlo come risposta (probabilmente insieme a come aggiungerlo come opzione predefinita in .vimrc, quindi la risposta è completamente autonoma.)
Wildcard

Risposte:


2

Trovo che di solito sei in grado di interrompere il processo di ripetizione inviando un SIGINT ( Ctrl+C). Finché un po 'di vimscript non esegue un ciclo interno veramente lungo, non c'è alcun problema DoS.

Vedi qui per un esempio di plug-in che può contenere una funzione che si avvia in base al numero inserito.

Per quasi tutti gli effetti questo problema qui è ipotetico.


4
"questo problema è ipotetico" ... No, non lo è. Ho dovuto lavorare su SSH sul mio telefono tramite connessioni 2G, dove ho perso accidentalmente una sequenza di tasti o fatto più battiture durante la digitazione in anticipo, risultando in situazioni molto simili (forse non 99999, ma numeri più piccoli sì).
Muru,

Bene, sì, un emulatore di terminale lento (a seconda della quantità di modifiche applicate da Vim) può aggravare i problemi aggiungendo un ritardo di elaborazione sul lato client. Devo arrivare a Ctrl + C rapidamente!
Steven Lu,

1
Puoi semplicemente usare <Esc>, non è necessario utilizzare <C-c>. La differenza è che <C-c>interrompe qualsiasi cosa Vim stia facendo (come eseguire una funzione) e <Esc>non lo fa. Non vuoi quasi mai usare <C-c>se non vuoi "uccidere" qualcosa.
Martin Tournoij,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.