1 puntos por GN⁺ 2024-07-08 | Aún no hay comentarios. | Compartir por WhatsApp
  • Por qué malloc rompió el JPGLoader de SerenityOS

  • Se investigó un bug en el que los colores se mostraban incorrectamente al decodificar imágenes JPG en SerenityOS

    • Parecía una confusión entre RGB y BGR, pero el problema no se resolvió incluso después de corregir el código
  • Rastreando el problema con bisecting

    • Se comenzó a buscar la causa del problema haciendo bisecting sobre los 1000 commits más recientes
    • SerenityOS usa su propia biblioteca estándar, AK, que es similar al STL de C++ pero más fácil de leer
    • Los cambios en AK afectan a todo el sistema operativo, por lo que el tiempo de compilación es largo
  • Resultado del bisect

    • Se encontró el commit que causaba el problema: el commit que implementó malloc_good_size()
    • Este commit agregó una función para optimizar el tamaño de asignación de memoria y reducir el desperdicio de memoria
  • Un descubrimiento sorprendente

    • Se investigó si HashTable y Vector podían ser la causa del problema
    • Después de cambiar la capacidad de HashTable, el problema se resolvió
  • Iteración no determinista de componentes seriales

    • JPGLoader guarda los componentes del archivo JPG en un HashTable y los usa de forma iterativa
    • El orden de los componentes no era determinista, lo que provocaba el problema
  • La causa del bug

    • Se almacenaron en HashTable objetos que requerían orden y se usó el iterador predeterminado
    • Los valores hash de los IDs de los componentes, por casualidad, quedaban alineados en el orden correcto
    • Al cambiar el tamaño de HashTable, el orden cambió y entonces apareció el problema
  • La solución

    • Se modificó JPGLoader para iterar sobre los componentes de forma determinista
    • Se usó una estructura de datos que garantiza el orden en lugar de HashTable
  • Reflexión final

    • Incluso un problema simple puede revelar un gran error
    • Se resolvió el problema de raíz para evitar que vuelva a ocurrir
  • Agradecimientos

    • Se agradece a los colegas que ayudaron con la depuración
    • Se aprendió mucho durante el proceso de encontrar y resolver el bug

Resumen de GN⁺

  • Este artículo trata sobre el proceso de rastrear y resolver un bug de decodificación de imágenes JPG ocurrido en SerenityOS
  • El problema, causado por el orden no determinista de HashTable, se resolvió cambiándolo por un orden determinista
  • El texto muestra muy bien la importancia y la complejidad del proceso de depuración de software
  • Un proyecto con funcionalidad similar es libjpeg de Linux, entre otros

Aún no hay comentarios.

Aún no hay comentarios.