Introduction

L'auteur de cet article utilise quotidiennement le gestionnaire de fenêtres Enlightenment E16, créé en 1997. Un bug rare et bloquant, présent dans le codebase depuis 2006, a été identifié et corrigé. Ce bug était dû à une implémentation erronée de l'algorithme de Newton.

Contexte Technique

Le bug a été découvert lors de l'ouverture d'un fichier PDF dans Atril, ce qui a provoqué le gel de l'ensemble du bureau. L'utilisation de gdb a permis d'identifier la source du problème, qui se situait dans la fonction imlib_font_cache_glyph_get. Le code utilisait une méthode de recherche de type Newton pour estimer le nombre de caractères à supprimer pour ajuster la largeur du texte, mais cette méthode était sujette à des oscillations infinies.

Analyse et Implications

L'analyse du code a révélé que le bug était dû à l'absence de limite d'itération dans la méthode de Newton, ce qui pouvait provoquer des oscillations infinies. De plus, la tolérance de sortie était trop stricte, ce qui empêchait la convergence de l'algorithme. La correction du bug a consisté à ajouter une limite d'itération, à floorer la valeur de nuke_count à 1 et à floorer la valeur de cw à 1 pour éviter les divisions par zéro.

Perspective

Cet incident montre que même les logiciels anciens et stables peuvent contenir des bugs graves. Il est important de maintenir et de mettre à jour régulièrement les logiciels pour éviter les problèmes de sécurité et les bugs. De plus, il est essentiel de suivre les bonnes pratiques de développement, telles que l'utilisation de limites d'itération et de tolérances de sortie raisonnables, pour éviter les problèmes de convergence et les bugs.