Microsoft Zune Player falsch programmiert, Y2k9 Bug

470_zune10Viele haben es sicher schon im Netz gelesen oder haben selber einen Zune Player der ersten Generation der gegen Ende des Jahres 2008 anscheinend seinen Geist aufgab. Jetzt im neuen Jahr jedoch wieder funktioniert. Schuld daran ist jedoch eher die Firma Freescale, nicht umbedingt Microsoft.

Der C-Code zu dem Bug ist mittlerweile öffentlich zugänglich und der Fehler ist leicht zu finden. Wenn man sich den folgenden Ausschnitt etwas genauer ansieht merkt man wo der Fehler liegt:

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

Eine kleine Erklärung dazu: Das Jahr 2008 hatte, da es ein Schaltjahr war, 366 Tage und nicht wie üblich 365 Tage. Es wurde zwar versucht dieses Problem in dem obigen Code abzufangen, dies gelang jedoch eher teilweise ;). In der Zeile if (days > 366) fehlt nämlich ein =. Dadurch, dass das Jahr genau 366 Tage hatte und nicht etwa 367, wurde die while()-Schleife niemals verlassen, zumindest nicht solange das Jahr 2008 noch andauerte. Jetzt im neuen Jahr funktioniert der Code wieder korrekt, allerdings auch nur bis zum nächsten Schaltjahr ;).

Zune-Nutzer sollten daher vielleicht auf den iPod umsteigen, dort funktionieren auch Schaltjahre korrekt…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert