Le bug du 31/12/2008, disponible uniquement sur Zune 30.

L'année commence en rigolades pour beaucoup, parce qu'elle s'est mal terminée pour les propriétaires de baladeurs Zune 30Go. En effet, ce modèle du baladeur de Microsoft a subi un bien curieux bug qui a rendu inopérant chaque exemplaire le 31 décembre 2008.

Les curieux se sont évidemment jetés sur le code source du firmware de l'animal, lequel est rendu disponible via Freescale. Plus précisément, une lecture de la gestion de l'horloge révèle la perle suivante:

while (days > 365)
    {
        if (IsLeapYear(year))
        {
            if (days > 366)
            {
                days -= 366;
                year += 1;
            }
        }
        else
        {
            days -= 365;
            year += 1;
        }
    }

Pour ceux qui ne lisent pas couramment le C, un petit mot d'explication s'impose. Le 31 décembre 2008 est le 366 jour de l'année, 2008 étant bissextile. Cas prévu par le code ici présent, qui prévoit que si on dépasse le 365 jour de l'année il faut passer à l'année suivante si c'est une année normale, de même si on dépasse le 366ème jour d'une année bissextile. Et si on est précisément dans le 366ème jour d'une année bissextile? Oh zut...

code (c) | microsoft | wtf | zune

<<< Project Euler : Solution au problème 2, en Python (2009-01-04) | De la bonne manière de donner mauvaise presse à la cause qu'on défend. (2008-12-26) >>>