• malloc ने SerenityOS के JPGLoader को क्यों बिगाड़ दिया

  • SerenityOS में JPG इमेज decode करते समय रंग गलत दिखने वाले bug की जाँच की गई

    • यह RGB और BGR के भ्रम जैसा लगा, लेकिन code बदलने के बाद भी समस्या हल नहीं हुई
  • Bisecting के ज़रिए समस्या का पता लगाना

    • हाल के 1000 commits पर bisecting करके समस्या के कारण को ढूँढना शुरू किया गया
    • SerenityOS अपनी standard library AK का उपयोग करता है, जो C++ के STL जैसी है लेकिन पढ़ने में अधिक आसान है
    • AK में बदलाव पूरे operating system को प्रभावित करते हैं, इसलिए build time लंबा हो जाता है
  • Bisect के नतीजे

    • समस्या पैदा करने वाला commit मिल गया: malloc_good_size() को implement करने वाला commit
    • इस commit ने memory allocation size को optimize करके memory waste कम करने की सुविधा जोड़ी
  • चौंकाने वाली खोज

    • यह जाँचा गया कि शायद HashTable और Vector समस्या के कारण हों
    • HashTable की capacity बदलने के बाद समस्या हल हो गई
  • Non-deterministic serial component iteration

    • JPGLoader, JPG file के components को HashTable में store करता है और उन पर बार-बार iterate करता है
    • components का क्रम non-deterministic होने के कारण समस्या हुई
  • bug का कारण

    • ऐसे objects को HashTable में store किया गया जिन्हें क्रम की आवश्यकता थी, और default iterator का उपयोग किया गया
    • component ID के hash value संयोग से सही क्रम में aligned थे
    • HashTable का size बदलने से क्रम बदल गया और समस्या पैदा हुई
  • समाधान

    • JPGLoader को components पर deterministic तरीके से iterate करने के लिए बदला गया
    • HashTable की जगह ऐसा data structure इस्तेमाल किया गया जो क्रम की guarantee देता है
  • अंतिम विचार

    • साधारण-सी समस्या भी बड़ी गलती को उजागर कर सकती है
    • समस्या को जड़ से हल किया गया ताकि वह दोबारा न हो
  • आभार

    • debugging में मदद करने वाले साथियों का धन्यवाद
    • bug को खोजने और हल करने की प्रक्रिया में बहुत कुछ सीखा गया

GN⁺ का सार

  • यह लेख SerenityOS में हुए JPG image decoding bug को ट्रैक करने और हल करने की प्रक्रिया पर है
  • HashTable के non-deterministic क्रम से पैदा हुई समस्या को deterministic क्रम में बदलकर हल किया गया
  • यह लेख software debugging process की अहमियत और जटिलता को अच्छी तरह दिखाता है
  • मिलती-जुलती functionality वाले projects में Linux का libjpeg आदि शामिल हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.