1 poin oleh GN⁺ 2024-07-08 | Belum ada komentar. | Bagikan ke WhatsApp
  • Mengapa malloc merusak JPGLoader milik SerenityOS

  • Menyelidiki bug pada SerenityOS di mana warna ditampilkan salah saat mendekode gambar JPG

    • Awalnya terlihat seperti kebingungan antara RGB dan BGR, tetapi masalah tetap tidak terselesaikan bahkan setelah kode diperbaiki
  • Melacak masalah dengan bisecting

    • Mulai mencari penyebab masalah dengan melakukan bisecting pada 1000 commit terbaru
    • SerenityOS menggunakan pustaka standarnya sendiri, AK, yang mirip dengan STL di C++ tetapi lebih mudah dibaca
    • Perubahan pada AK memengaruhi seluruh sistem operasi sehingga waktu build menjadi lama
  • Hasil bisect

    • Menemukan commit yang menyebabkan masalah: commit yang mengimplementasikan malloc_good_size()
    • Commit ini menambahkan fungsi yang mengoptimalkan ukuran alokasi memori untuk mengurangi pemborosan memori
  • Penemuan yang mengejutkan

    • Menyelidiki kemungkinan bahwa HashTable dan Vector adalah penyebab masalah
    • Setelah kapasitas HashTable diubah, masalah pun teratasi
  • Iterasi komponen serial yang non-deterministik

    • JPGLoader menyimpan komponen file JPG di HashTable dan menggunakannya secara iteratif
    • Urutan komponen yang non-deterministik menyebabkan masalah
  • Penyebab bug

    • Menyimpan objek yang membutuhkan urutan ke dalam HashTable lalu menggunakan iterator default
    • Nilai hash dari ID komponen secara kebetulan tersusun dalam urutan yang benar
    • Saat ukuran HashTable berubah, urutannya ikut berubah dan masalah pun muncul
  • Solusi

    • Memperbaiki JPGLoader agar mengiterasi komponen secara deterministik
    • Menggunakan struktur data yang menjamin urutan alih-alih HashTable
  • Pemikiran akhir

    • Masalah sederhana pun dapat mengungkap kesalahan besar
    • Masalah diselesaikan sampai ke akar agar tidak terulang
  • Ucapan terima kasih

    • Berterima kasih kepada rekan-rekan yang membantu proses debugging
    • Banyak hal dipelajari selama proses menemukan dan memperbaiki bug

Ringkasan GN⁺

  • Tulisan ini membahas proses melacak dan menyelesaikan bug decoding gambar JPG yang terjadi di SerenityOS
  • Masalah yang muncul karena urutan non-deterministik pada HashTable diselesaikan dengan mengubahnya menjadi urutan yang deterministik
  • Tulisan ini menunjukkan dengan baik pentingnya dan kompleksitas proses debugging perangkat lunak
  • Proyek dengan fungsi serupa antara lain libjpeg di Linux

Belum ada komentar.

Belum ada komentar.