1 pontos por GN⁺ 2024-07-08 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Por que o malloc quebrou o JPGLoader do SerenityOS

  • Investigação de um bug em que as cores eram exibidas incorretamente ao decodificar imagens JPG no SerenityOS

    • Parecia ser uma confusão entre RGB e BGR, mas o problema não foi resolvido mesmo após corrigir o código
  • Rastreamento do problema com bisect

    • Começou-se a procurar a causa do problema fazendo bisect nos 1000 commits mais recentes
    • O SerenityOS usa sua própria biblioteca padrão, a AK, que é semelhante à STL do C++, mas mais fácil de ler
    • Alterações na AK afetam o sistema operacional inteiro, o que torna o tempo de build mais longo
  • Resultado do bisect

    • Foi encontrado o commit que causou o problema: o commit que implementou malloc_good_size()
    • Esse commit adicionou uma função para otimizar o tamanho das alocações de memória e reduzir o desperdício
  • Descoberta surpreendente

    • Foi investigada a possibilidade de HashTable e Vector serem a causa do problema
    • Após alterar a capacidade da HashTable, o problema foi resolvido
  • Iteração não determinística de componentes seriais

    • O JPGLoader armazena os componentes do arquivo JPG em uma HashTable e os usa iterativamente
    • O problema ocorreu porque a ordem dos componentes não era determinística
  • Causa do bug

    • Objetos que exigiam ordem foram armazenados em uma HashTable, usando o iterador padrão
    • Os valores de hash dos IDs dos componentes, por acaso, ficavam organizados na ordem correta
    • Quando o tamanho da HashTable mudou, a ordem também mudou e o problema apareceu
  • Solução

    • O JPGLoader foi corrigido para iterar os componentes de forma determinística
    • Em vez de HashTable, foi usada uma estrutura de dados que garante a ordem
  • Considerações finais

    • Mesmo um problema simples pode revelar um erro grande
    • O problema foi resolvido na raiz para evitar recorrência
  • Agradecimentos

    • Agradecimento aos colegas que ajudaram na depuração
    • Muito foi aprendido no processo de encontrar e corrigir o bug

Resumo do GN⁺

  • Este texto trata do processo de rastrear e corrigir um bug de decodificação de imagens JPG ocorrido no SerenityOS
  • O problema foi resolvido ao trocar a ordem não determinística da HashTable por uma ordem determinística
  • O texto mostra bem a importância e a complexidade do processo de depuração de software
  • Projetos com funcionalidade semelhante incluem o libjpeg do Linux

Ainda não há comentários.

Ainda não há comentários.