Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Une erreur de code sur StackOverflow perpétue un bug depuis plus de 10 ans

Je suis tombé sur le thread Twitter d’un développeur répondant au doux pseudo de « Foone » qui a soulevé un problème que j’ai trouvé passionnant !

Savez-vous pourquoi, lorsque vous avez l’outil de gestion des drivers de Razer baptisé Synapse, Docker pour Windows ne veut pas se lancer ?

Capture d'écran du code source de StackOverflow avec l'erreur de code.

Oui c’est étrange. Mais vous allez voir, l’explication est folle.

A la base chacun de ces programmes est conçu pour être lancé une seule et unique fois. On ne peut pas lancer 2 docker.exe ou 2 synapse.exe en même temps. Pour cela, les développeurs des applications utilisent ce qui s’appelle un mutex (Exclusion mutuelle).

Jusque là rien d’anormal. Seulement, bizarrement, Docker et l’outil de Razer s’excluent l’un l’autre. En analysant un peu le code, foone a remarqué que pour fixer ce mutex global, les développeurs des 2 outils utilisaient ce code :

string.Format("Global{0}", (object) Assembly.GetExecutingAssembly().GetType().GUID);

L’objectif est de récupérer l’identifiant unique du processus exécuter (GUID) pour empêcher qu’une seconde copie du programme ne soit lancée. Seulement, en observant le code, on peut voir que la fonction GetType() est utilisée. Cette fonction ne récupère pas l’instance en elle-même, mais le type de cette instance. Et ici l’instance n’est pas Docker ou Synapse, mais l’instance du framework .Net lui-même qui est utilisé pour faire tourner ces applications.

Et comme le GUID qui est récupéré ensuite est celui de l’instance .Net, et bien il est le même pour les 2 applications. D’où l’exclusion mutuelle.

Mais attendez, ce n’est pas tout. En creusant un peu, Foone s’est rendu compte que tout cela venait de Stack Overflow et plus exactement d’un certain Nathan qui en 2009 demandait comment récupérer ce GUID.

Et malheureusement, la top réponse qui lui ai donné contient la fameuse erreur.

Capture d'écran de la page de profil de l'utilisateur ayant signalé le bug sur StackOverflow.

1 an et 1 mois plus tard, un autre internaute indique qu’il y a une erreur et donne la bonne ligne de code. Malheureusement TROP TARD !

Et c’est comme ça que bientôt 11 ans plus tard, on se retrouve avec des erreurs de ce type dans nos outils récents.

Évidemment, pour empêcher cela, il aurait fallu que les développeurs de ces outils aillent au-delà du copier-coller, mais comment leur en vouloir, on fait tous ça ou presque.

« Je copie, je colle, je compile, je regarde, ça marche, youpi et je passe à autre chose.« 

Toutefois, maintenant que vous savez, pensez à cette histoire la prochaine fois que vous copierez du code en provenance du net.

Il semblerait que Docker ait déjà corrigé le souci, libérant le mutex de Razer :).


Comment supprimer vos données personnelles d’Internet avec Incogni ?

Espace partenaire

🔒Votre vie privée est-elle vraiment privée❓

😮Vous l’ignorez peut-être, mais des sociétés appelées Data Brokers collectent, agrègent et monnaient vos données personnelles sans votre consentement.

📝Votre nom, votre prénom, votre date de naissance, 📧 votre email, 🏠 votre adresse postale, et bien d’autres informations sont ainsi collectés pour être revendus à des publicitaires. Il est donc temps de reprendre le contrôle de vos informations personnelles grâce à Incogni

🛡️Incogni est un service qui se charge pour vous de contacter ces Data Brokers et d’exiger la suppression de vos données personnelles.

💥 Profitez d’une offre spéciale avec le code INCOGNI60 et ne laissez pas votre vie privée entre de mauvaises mains❗🙅‍♀️

👇🔍 CLIQUEZ ICI POUR EN SAVOIR PLUS 🔍👇

Les articles du moment