Extrait de l'émission CPU release Ex0181 : lost + found (volume 15 : Il est interdit de danser).
Si je demande à un néophyte de stocker une information dans un système informatique, il cherchera d’abord à stocker du texte. Le texte c’est la façon dont les humains stockent l’information, depuis les tablettes d’argile jusqu’aux murs des cités HLM. Mais en informatique, transformer du texte en 0 et en 1, ça prend de la place, alors autant que possible on utilise des types de variables plus efficaces. Par exemple une variable binaire peut stocker 0 ou 1, vrai ou faux. Si vous n’avez pas d’autre état à gérer, c’est très suffisant.
Mais à vouloir utiliser des variables trop petites on peut perdre de l’information ou manquer de place pour coder la donnée correctement, ce qui a donné lieu a quelques bugs assez connus. Le plus connu est le Bug de l’An 2000, celui qui devait causer la fin de l’Humanité en faisant s’écraser la station Mir sur la Terre. Il était dû au fait que les années étaient stockées sur 2 chiffres, ce qui rendait différenciable l’année 1900 et l’année 2000.
Heureusement le bug fut suffisamment anticipé et patché dans tous les sens à grands renforts de CD-Rom dans la presse (eh oui en 2000, l’ADSL arrivait à peine et les foyers qui avaient Internet étaient connectés en RTC).
Mais ce n’est pas le seul puisque le 1er janvier 2022, les plateformes de filtrage d’Exchange versions 2016 et 2019 ont rencontré un bug qui n’avait été anticipé par les équipes de Microsoft.
Si vous ne savez pas ce qu’est Exchange, c’est tout simplement l’un des logiciels de serveur e-mail (mail exchanger
) les plus utilisés dans le monde.
Le bug est aussi discret qu’inévitable, en effet l’antispam d’Exchange stocke les dates en int32 signé, ce qui signifie que la valeur 2 201 010 001 correspondant au 1er janvier 2022 dépasse la valeur maximum possible pour un int32 signé 2 147 483 647.
La solution est de remplacer le type de variable int32 par une variable long capable de stocker des nombres beaucoup plus grands, ce qui est à priori la solution disponible dans les correctifs. [Le choix immédiat a été de passer la définition de date à unit32, c'est à dire à un entier sur 32 bits non signé].
Malheureusement les bugs liés au stockage de variable sont plus courants qu’on ne le pense. Un autre exemple récent est celui de Tous Anti-Covid Vérif, l’application qui sert encore aujourd’hui à vérifier les pass sanitaires. L’application souffre de défauts de conceptions assez évidents, d’autant plus que le code source est ouvert [Euh ? Du code est publié mais pas compilable]. L’un de ses défauts est lié au fait que la vérification de la validité d’un pass sanitaire se faisait en comparant un string, c’est à dire une variable texte à une autre variable texte stockée en dur
directement dans le code.
Une telle pratique est déconseillée même aux développeurs débutants, il faut normalement gérer les différents états du pass sanitaire sur une variable de type entier, par exemple 0 pour valide, 1 pour invalide, 2 pour expiré, etc… Ensuite pour chaque état il faut gérer des labels qui viendront afficher un texte dans la langue de l’utilisateur.
Et c’est là que le bât blesse, les variables étaient stockées en dur et en français dans le code (Cocorico !) ce qui provoquait un dysfonctionnement de l’application si le smartphone de l’utilisateur était en anglais par exemple. En scannant un pass valide, l’application renvoie une valeur Invalid sans le e
qui ne correspond pas à la valeur Invalide attendue par le programme.
Heureusement le bug a été assez vite corrigé mais il est assez désolant de voir la liberté de circulation de millions de personnes dépendre d’un logiciel codé à la va vite et qui honte à un étudiant en 1ère année de licence informatique.
Et le prochain bug de date c’est pour quand ?
Eh bien figurez-vous que d’ici 2038, tous les systèmes se basant sur les dates POSIX rencontreront le même problème. Les dates POSIX sont codées elles aussi sur 32 bits donc ont cette limite de 2 milliards et des poussières. Le 19 janvier 2038 à 3 h 14 min 8 s
Espérons que les 16 ans qu’ils nous restent soient bien mis à profit.
Texte : Solarus
Photo : Le Dr Anthony Fauci esquissant une réaction à des propos du Pdt Donald Trump lors d'un de ses points sur le Covid en 2020. Capture TV via D.R. via imgflip.com