1 points par GN⁺ 2024-07-08 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Pourquoi malloc a cassé le JPGLoader de SerenityOS

  • En enquêtant sur un bug d’affichage incorrect des couleurs lors du décodage d’images JPG dans SerenityOS

    • Cela semblait être une confusion entre RGB et BGR, mais le problème persistait même après correction du code
  • Remonter à la source avec le bisecting

    • Les 1000 derniers commits ont été passés au bisecting pour commencer à identifier la cause du problème
    • SerenityOS utilise sa propre bibliothèque standard, AK, similaire à la STL de C++ mais plus lisible
    • Les changements dans AK affectent tout le système d’exploitation, ce qui allonge le temps de compilation
  • Résultat du bisect

    • Le commit à l’origine du problème a été identifié : celui qui implémentait malloc_good_size()
    • Ce commit ajoutait une fonctionnalité optimisant la taille des allocations mémoire afin de réduire le gaspillage
  • Découverte surprenante

    • L’hypothèse d’un problème lié à HashTable et Vector a été examinée
    • Après modification de la capacité de HashTable, le problème a disparu
  • Itération non déterministe sur les composants série

    • JPGLoader stocke les composants d’un fichier JPG dans une HashTable et les réutilise par itération
    • L’ordre des composants n’étant pas déterministe, cela provoquait le problème
  • Cause du bug

    • Des objets nécessitant un ordre précis étaient stockés dans une HashTable, puis parcourus avec l’itérateur par défaut
    • Les valeurs de hachage des identifiants de composants se retrouvaient par hasard dans le bon ordre
    • Quand la taille de la HashTable a changé, l’ordre a changé lui aussi, ce qui a déclenché le problème
  • Solution

    • JPGLoader a été modifié pour itérer sur les composants de manière déterministe
    • Une structure de données garantissant l’ordre a été utilisée à la place de HashTable
  • Réflexions finales

    • Même un problème simple peut révéler une erreur importante
    • Le problème a été corrigé à la racine pour éviter toute réapparition
  • Remerciements

    • Merci aux collègues qui ont aidé au débogage
    • Le processus de découverte et de correction du bug a permis d’apprendre beaucoup

Le récapitulatif de GN⁺

  • Cet article retrace l’enquête et la résolution d’un bug de décodage d’images JPG dans SerenityOS
  • Le problème, causé par l’ordre non déterministe d’une HashTable, a été résolu en imposant un ordre déterministe
  • L’article montre bien l’importance et la complexité du processus de débogage logiciel
  • Parmi les projets aux fonctionnalités similaires, on peut citer libjpeg sur Linux

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.