मैं उपसर्ग कमांड के लिए इस्तेमाल होने से बड़ी संख्या में बेतुके तरीके से (या पुष्टि करने के लिए कम से कम संकेत) कैसे रोक सकता हूं?


9

ऐसा कभी-कभी नहीं होता जितना आप सोचते हैं, लेकिन यह कभी-कभार होता है, और मेरे पास बिल्ली भी नहीं है।

मूल रूप से यदि आप संख्या पंक्ति या संख्या को मैश करते हैं और फिर एक कीकोम्बो को हिट करने के लिए होता है जो एक दोहराने योग्य कमांड को ट्रिगर करता है, तो अनजाने में Vim को कई हजार, मिलियन, या यहां तक ​​कि अरब बार कार्य करना संभव है। यह आसानी से नियंत्रण से बाहर हो जाता है और डेटा हानि हो सकती है।

इसलिए मुझे आश्चर्य है कि अगर स्रोत कोड में कोई कॉन्फ़िगरेशन या कुछ है, तो हम इस प्रकार के DoS को रोकने के लिए एक स्वच्छता जांच के रूप में सेवा कर सकते हैं।


4
बस यह सुनिश्चित करने के लिए कि मैं आपके प्रश्न को समझता हूं: आप नियमित रूप से कुछ अनुक्रम की तरह गलती से टाइप करते हैं 144477@@या 99999.आप उन निष्पादन को रोकना चाहते हैं जब संख्या बहुत बड़ी है? क्या मैं सही हू? (मैं क्योंकि ऐसा लगता है कि एक छोटे से मुझे अजीब सा पूछने के लिए, मैं कभी इस समस्या थी)
statox

3
क्यों नहीं ... आप क्या करते हैं उस पर ध्यान दें?
रोमेल

3
@statox हाँ, यह सही है। रोमैनल के पास एक वैध बिंदु भी है, लेकिन यह सवाल के लिए अप्रासंगिक लगता है। प्रश्न बना हुआ है, और यह अन्य प्रश्नों की तरह "गंभीर" नहीं हो सकता है, लेकिन फिर भी यह एक प्रश्न है। मुझे बस लगता है कि यह आकस्मिक इनकार-की-सेवा को रोकने के लिए इस पर एक ऊपरी बाध्य निर्दिष्ट करने में सक्षम होने के लिए समझ में आता है। के रूप में undolevels के बारे में सुझाव के लिए, हाँ यह प्रासंगिक हो सकता है अगर यह ओवरफ्लो बफर के रूप में अच्छी तरह से, मैं यह भी नहीं माना था। (ऐसा नहीं है कि एक बहुत ही महत्वपूर्ण उदाहरण है - मेरे पास 60% कीबोर्ड है, शीर्ष सीमा पंक्ति है। मैं इसे अपने हाथ से उठाता हूं। इसे अनप्लग करना भूल जाएं।)
स्टीवन लू

4
आप set showcmdनीचे-दाएं कोने में टाइप की गई कुंजियों को दिखाने के लिए उपयोग कर सकते हैं ।
मार्टिन टूरनोइज

1
@Carpetsmoker मुझे लगता है कि यह स्क्रीन पर दिखाए जाने के बाद से "पुष्टि करने के लिए संकेत" के रूप में योग्य होगा। मैं इसे एक उत्तर के रूप में जोड़ने की सलाह देता हूं (शायद साथ में इसे डिफ़ॉल्ट विकल्प के रूप में कैसे जोड़ा .vimrcजाए, इसलिए यह उत्तर पूरी तरह से स्व-निहित है।)
वाइल्डकार्ड

जवाबों:


2

मुझे लगता है कि आप आमतौर पर SIGINT ( Ctrl+C) भेजकर पुनरावृत्ति प्रक्रिया को बाधित कर सकते हैं । जब तक कुछ vimscript वास्तव में लंबे समय तक आंतरिक लूप नहीं चल रहा है, तब तक कोई DoS चिंता नहीं है।

एक प्लगइन के उदाहरण के लिए यहां देखें एक फ़ंक्शन हो सकता है जो दर्ज संख्या के आधार पर लूप करता है।

लगभग सभी इरादों और उद्देश्यों के लिए यह मुद्दा एक काल्पनिक है।


4
"यह मुद्दा एक काल्पनिक है" ... नहीं, यह नहीं है। मुझे अपने फोन पर 2 जी कनेक्शन पर एसएसएच पर काम करना पड़ा है, जहां मैंने गलती से कीस्ट्रोके को मिस कर दिया है या प्रत्याशा में टाइप करते हुए कई कीस्ट्रोक्स बना दिए हैं, जिसके परिणामस्वरूप बहुत ही समान परिस्थितियां हैं (शायद 99999 नहीं, लेकिन छोटी संख्या हां)।
मुरु

कूल, हाँ एक धीमा टर्मिनल एमुलेटर (जो विम लागू कर रहा है बदलने की मात्रा पर निर्भर करता है) क्लाइंट साइड पर प्रसंस्करण देरी को जोड़कर समस्याओं को बढ़ा सकता है। जल्दी से Ctrl + C के लिए जाना होगा!
स्टीवन लू

1
आप बस उपयोग कर सकते हैं <Esc>, आपको उपयोग करने की आवश्यकता नहीं है <C-c>। अंतर यह है कि <C-c>विम जो कुछ भी कर रहा है उसे निरस्त कर देता है (जैसे कि कोई फ़ंक्शन चलाना), और <Esc>नहीं। आप लगभग कभी भी उपयोग नहीं करना चाहते <C-c>जब तक आप कुछ "मार" नहीं करना चाहते।
मार्टिन टूरनोइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.