1 điểm bởi GN⁺ 2024-07-08 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Vì sao malloc làm hỏng JPGLoader của SerenityOS

  • Điều tra một lỗi khiến màu sắc hiển thị sai khi giải mã ảnh JPG trong SerenityOS

    • Ban đầu trông giống như sự nhầm lẫn giữa RGB và BGR, nhưng ngay cả sau khi sửa mã thì vấn đề vẫn không được giải quyết
  • Lần vết vấn đề bằng bisecting

    • Bắt đầu tìm nguyên nhân bằng cách bisect khoảng 1000 commit gần đây
    • SerenityOS dùng thư viện chuẩn riêng là AK, tương tự STL của C++ nhưng dễ đọc hơn
    • Các thay đổi trong AK ảnh hưởng tới toàn bộ hệ điều hành nên thời gian build kéo dài
  • Kết quả bisect

    • Tìm ra commit gây ra vấn đề: commit triển khai malloc_good_size()
    • Commit này thêm tính năng tối ưu kích thước cấp phát bộ nhớ để giảm lãng phí bộ nhớ
  • Phát hiện bất ngờ

    • Điều tra khả năng HashTableVector là nguyên nhân của vấn đề
    • Sau khi thay đổi dung lượng của HashTable, vấn đề được khắc phục
  • Lặp qua các component tuần tự theo cách không xác định

    • JPGLoader lưu các component của tệp JPG trong HashTable và lặp lại chúng
    • Thứ tự của các component không mang tính xác định nên đã gây ra vấn đề
  • Nguyên nhân của lỗi

    • Lưu các đối tượng cần thứ tự vào HashTable rồi dùng iterator mặc định
    • Giá trị hash của ID component tình cờ được sắp theo đúng thứ tự
    • Khi kích thước HashTable thay đổi, thứ tự cũng đổi theo và gây ra lỗi
  • Cách khắc phục

    • Sửa JPGLoader để lặp qua các component theo cách xác định
    • Dùng cấu trúc dữ liệu bảo đảm thứ tự thay cho HashTable
  • Suy nghĩ cuối cùng

    • Một vấn đề đơn giản cũng có thể làm lộ ra sai lầm lớn
    • Giải quyết tận gốc vấn đề để ngăn nó tái diễn
  • Lời cảm ơn

    • Gửi lời cảm ơn tới các đồng nghiệp đã hỗ trợ gỡ lỗi
    • Học được rất nhiều trong quá trình phát hiện và sửa lỗi

Tóm tắt của GN⁺

  • Bài viết này nói về quá trình lần vết và sửa một lỗi giải mã ảnh JPG xảy ra trong SerenityOS
  • Vấn đề do thứ tự không xác định của HashTable đã được khắc phục bằng cách chuyển sang thứ tự xác định
  • Bài viết cho thấy rõ tầm quan trọng và độ phức tạp của quá trình gỡ lỗi phần mềm
  • Một dự án có chức năng tương tự là libjpeg trên Linux

Chưa có bình luận nào.

Chưa có bình luận nào.