जब मैं Chrome में किसी लिंक पर होवर करता हूं तो क्या होता है?


40

जब http://a//%%30%30Google क्रोम में इस लिंक ( ) को क्लिक किया जाता है, तो क्रोम सभी टैब और इंस्टेंस को तोड़ता और बंद करता है।

लेकिन, कुछ मामलों में मुझे केवल लिंक पर होवर करने की आवश्यकता होती है, और टैब क्रैश हो जाता है।

जब मैं इस लिंक पर मंडराता हूं तो क्या होता है? मेरा मतलब है, जब कोई लिंक ओवर हो जाता है तो क्रोम क्या करता है?


12
यहाँ एक महान टॉम स्कॉट वीडियो है जो वह सोचता है कि क्रोम में क्या हो रहा है के बारे में बात करता है youtube.com/watch?v=0fw5Cyh21TE
DLeh

5
यह बग Chrome 45.0.2454.101 में तय किया गया था । यह अभी भी Chrome 45.0.2454.99 में मौजूद था ।
डेल्टिक

Chrome 45.0.2454.101 में बग को ठीक नहीं किया गया है (कम से कम मैक ओएस 10.10.5 क्रोम अभी भी दुर्घटनाग्रस्त है)।
गणित

जवाबों:


42

दुर्घटना में एक हाल ही में खोजे बग के कारण है क्रोम और अन्य - वेबकिट ब्राउज़रों (!) * - खास तौर से किसी से संबंधित %%30%30, %0%30या %%300URL के भाग के रूप में जो आंतरिक रूप से सभी अंत एक ही प्रतीक का प्रतिनिधित्व अप: अशक्त । आप यहाँ बग के बारे में अधिक पढ़ सकते हैं ।

यह एक बग नहीं है जो अधिकांश लिंक को प्रभावित करता है, इसलिए आपको आमतौर पर लिंक पर मंडराने के बारे में चिंता करने की ज़रूरत नहीं है।

नोट:
* अन्य WebKit ब्राउज़रों में सफारी, ओपेरा, स्टीम ब्राउज़र, मिडोरी, S60 (सिम्बियन), ब्लैकबेरी ब्राउज़र और प्लेस्टेशन 3 के ब्राउज़र शामिल हैं - लेकिन फ़ायरफ़ॉक्स, इंटरनेट एक्सप्लोरर या एज नहीं।

संपादित करें: इस बग को अब Chrome 45.0.2454.101 में डेल्टीक के रूप में इंगित किया गया है।

और क्या होता है

समस्या URL कैनोनिकलाइज़र से संबंधित है , जो लिंक पर मंडराने के साथ ही चलती है - संभवतः ब्राउज़र की स्थिति पट्टी में लिंक प्रदर्शित करने के लिए, और वेबपृष्ठ को प्रीफ़िट करने के लिए इसलिए यह एक बार क्लिक करने के बाद तेज़ी से लोड होता है।

URL कैनोनिकलाइज़र की भूमिका के लिए:
जब कोई URL लिखा जाता है HTML, तो उसे इस रूप में /homeया के रूप में लिखा जा सकता है ../../home, लेकिन ब्राउज़र को इस URL को किसी प्रोटोकॉल और किसी डोमेन के साथ भी अनुवाद करना होगा, जैसे कि http://superuser.com/home। इसके अलावा यूआरएल हो सकती यूआरएल पलायन कि जरूरत होने के लिए अनुवाद है, और इन पलायन कर रहे हैं प्रतिशत इनकोडिंग , की तरह %%30%30। (URL की अधिक विस्तृत सूची यहां से बच जाती है )।
इस URL अनुवाद को संभालने वाली कार्यक्षमता दुर्घटनाग्रस्त हो रही है, क्योंकि यह इनपुट प्राप्त करता है जो डेवलपर्स को उम्मीद नहीं थी / संभाल।

यहाँ कोड परिवर्तन का एक सारांश है जो समस्या को तय करता है:

URL पथ में समस्याग्रस्त नेस्टेड एस्केप को सही ढंग से हैंडल करें।

विशेष रूप से, यदि इनपुट में अनसेफिंग आउटपुट URL की ओर जाता है, जिसमें नया बचा हुआ अनुक्रम होता है, जैसे इनपुट "%% 30% 30" को "% 00" में परिवर्तित करना, आउटपुट सुनिश्चित करने के लिए "% 25" के रूप में अग्रणी '%' से बच जाएं। सीक्वेंस को नए मान्य एस्केप सीक्वेंस के रूप में नहीं माना जाता है।

यह सुनिश्चित करता है कि एक ही URL को दूसरी बार कैनोनिकलाइज़ करने से इसमें कोई बदलाव नहीं होगा, जो कि डिबग और रिलीज़ बिल्ड दोनों प्रकार के स्थानों में क्रैश और अन्य बग से बचने के लिए महत्वपूर्ण है।


3
स्पष्टता के लिए, FireFox या IE 11 के साथ कोई मुद्दा नहीं
डेव

6
ओपेरा को ध्यान में रखते हुए क्रोम इंजन पर आधारित है जो चौंकाने वाला नहीं है कि यह भी दुर्घटनाग्रस्त हो जाता है। जो कई रेंडरिंग इंजन होने का एक अच्छा कारण है।
रामहाउंड

8
लेकिन होवर पर ऐसा क्यों होता है ? मेरा मतलब है, जब मैं किसी लिंक को हॉवर करता हूं, तो कोई खोज नहीं होती है, तो यह क्रैश क्यों होता है?
LINQ

4
यह अभी तक स्पष्ट नहीं है कि बग का कारण क्या है, लेकिन कुछ को लगता है कि यह संबंधित है URL canonicalizer, जो जाहिरा तौर पर एक लिंक पर मंडराना शुरू कर देता है, शायद ब्राउज़र की स्थिति पट्टी में लिंक प्रदर्शित करने के लिए? मैं आपको एक निश्चित उत्तर नहीं दे सकता हूं, हालांकि जब कोई URL HTML में लिखा जाता है, तो वह इस रूप में /homeया के रूप में लिखा जा सकता है ../../home, लेकिन ब्राउज़रों को इस URL को किसी प्रोटोकॉल और किसी डोमेन के साथ भी अनुवाद करना होगा, जैसे http://superuser.com/home, शायद कार्यक्षमता को संभालना जो दुर्घटनाग्रस्त हो रहा है, क्योंकि यह अप्रत्याशित इनपुट प्राप्त करता है?
miyalys

15
@ JéfersonBueno जब आप किसी लिंक पर जाते हैं, तो क्रोम इसे निचले बाएँ कोने में प्रदर्शित करता है। इसके लिए कुछ प्रसंस्करण की आवश्यकता होती है, जिसमें विशेष रूप से एन्कोड किए गए पात्रों का "अनुवाद" भी शामिल है। यह प्रसंस्करण छोटी गाड़ी है, और पूरे प्रोग्राम को क्रैश करने का कारण बनता है।
फैबियो का कहना है कि मोनिका

11

जैसा कि फैबियो तुरती कहते हैं,

जब आप किसी लिंक पर होवर करते हैं, तो क्रोम इसे निचले बाएँ कोने में प्रदर्शित करता है। इसके लिए कुछ प्रसंस्करण की आवश्यकता होती है, जिसमें विशेष रूप से एन्कोड किए गए पात्रों का "अनुवाद" भी शामिल है।

हालाँकि, आपकी पोस्ट और टिप्पणी से मुझे लगता है कि आप इस बारे में अधिक चिंतित हैं कि क्या Chrome बैकग्राउंड में लिंक से जुड़ता है। यह अन्य आधुनिक ब्राउज़रों ( फ़ायरफ़ॉक्स , ओपेरा ) को करता है। आप Chrome की प्राथमिकताओं में प्रीफ़ेटिंग को अक्षम करना चाहते हैं, या अधिक गोपनीयता सेटिंग्स प्राप्त करने के लिए uBlock उत्पत्ति स्थापित कर सकते हैं।


6

मैं यहाँ जो कुछ होता है, उस पर कुछ और स्पष्टीकरण देना चाहता था।

असल में,% 30 एक URL-एन्कोडेड 0 है, और% 00 एक URL-एनकोडेड NULL है (जो 0000 0000 बाइनरी में प्रदर्शित किया गया है)। इसलिए यदि आपके पास एक URL है जिसमें एक नेस्टेड एन्कोडेड वर्ण है जो NULL को डिकोड करेगा, तो बग होता है।

Chrome URL को कैनोनिकल करने पर निम्न कार्य करता है (स्रोत: https://code.google.com/p/chromium/issues/detail?id=533361#c13 ):

  • एक इनपुट स्ट्रिंग "http: //a.com/%%30%30" " http://a.com/%00 " तक पहुंच से बाहर है और एक वैध GURL माना जाता है।
  • यह GURL अंततः GURLToDatabaseURL () को भेजा जाता है, जो उपयोगकर्ता नाम और पासवर्ड को छीनने के लिए उस पर प्रतिस्थापनादाता () को कॉल करता है।
  • प्रतिस्थापनादाता () URL को फिर से रद्द कर सकते हैं।
  • पथ का कैननिकीकरण "% 00" अनुक्रम को हिट करता है, बाहर निकलता है, यह देखता है कि यह 0 वर्ण है जो URLs में अमान्य है, इसे छोड़ दिया गया है, लेकिन परिणामी URL को अमान्य के रूप में चिह्नित करता है।
  • एक बार जब हम GURLToDatabaseURL () में वापस आते हैं, तो यह नए URL पर .spec () को कॉल करता है, यह मान्य होने की उम्मीद करता है, क्योंकि इनपुट URL के वैध होने की गारंटी थी और हमने केवल उपयोगकर्ता नाम और पासवर्ड को हटा दिया था। यह DCHECKs।

इसलिए URL को पहले वैध माना जाता है, लेकिन कुछ निजी डेटा को हटाने के बाद, इसे अमान्य कर दिया जाता है। हालांकि, उस डेटा को हटा दिए जाने के बाद, उस विशेष कोड को कहा जाने वाला फ़ंक्शन एक वैध URL की अपेक्षा करता है।

इस URL को अमान्य क्यों माना जाता है इसका एक कारण यह है कि NULL का उपयोग कई पुराने सॉफ़्टवेयर और भाषाओं में स्ट्रिंग के अंत को इंगित करने के लिए किया जाता है (क्योंकि यह मूल रूप से एक पंक्ति में 8 शून्य है, जो कंप्यूटर के लिए पता लगाना आसान है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.