Pourquoi des extraits de code provenant d’un débordement de pile peuvent interrompre votre projet

Online Coding Courses for Kids

Il y a deux ans, il y avait un étrange problème avec Docker pour Windows. Les gens n’ont pas pu démarrer Docker sur leurs ordinateurs Windows. Ce problème étrange a été ouvert par un utilisateur de Github et plusieurs autres utilisateurs ont dit qu’ils l’avaient également rencontré. Personne ne savait ce qui n’allait pas jusqu’à ce Message Reddit surgi.

Il a été identifié que le problème s’est produit lorsque vous avez essayé d’exécuter Docker pour Windows alors que Razor Synapse s’exécute en arrière-plan. Si Razer Synapse est en cours d’exécution, Docker pense qu’il existe déjà une instance en cours d’exécution et qu’elle ne démarre pas.

Les deux applications ne veulent qu’une seule instance d’elles-mêmes en cours d’exécution. Bien que cela semble être une exigence légitime, l’implémentation semble être la cause première du bogue. Le code buggy qui a causé le problème:

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

Le problème est que le GUID renvoyé est le GUID du type System.Reflection.RuntimeAssembly et non un GUID pour un type défini dans l’assembly Docker pour Windows.

Quelque chose d’intéressant

Si une seule des applications avait utilisé l’extrait de code incorrect ci-dessus, il n’y aurait pas eu de problème en premier lieu. Mais, il s’avère que les deux applications ont utilisé l’extrait de code incorrect, ne laissant ainsi pas les deux instances s’exécuter en même temps.

Mais d’où pensez-vous que ces deux applications ont obtenu leur extrait de code?

Vous l’avez déjà deviné – Stack Overflow.

Voici le post défectueux de Stack Overflow dont les deux applications ont obtenu leur extrait de code.

Vous ne verrez pas la réponse erronée si vous visitez la page maintenant, car ils ont modifié la réponse. Si vous voulez le voir par vous-même, visitez une ancienne archive de la page en utilisant le Wayback Machine.

Capture d’écran par Кекек Мачан

Points clés à retenir pour les développeurs par Foone Turing:

  • Réfléchissez à la façon dont vous trouveriez ce bogue dans vos propres programmes.
  • Vous copiez et collez le code et cela semble fonctionner. Ce que vous ne réalisez pas, c’est qu’il est cassé – parce que vous n’exécutez aucun de ces programmes qui ont fait la même erreur.


Close Menu