Autopsia al código fuente del Zune revela orden de suicidio

(c) Pastie.org

(c) Pastie.org

Para los más fanáticos o para aquellos que requieren de una explicación lógica ante un problema complejo, ya está disponible el código de programación que hizo que miles de reproductores Zune dejaran de funcionar colectivamente. El error comienza en la línea 249.

En circunstancias normales, esto funciona muy bien. La función sigue restando ya sea 365 o 366 hasta que se reduce a menos de un año para luego convertirse en el mes y el día de mes.

Lo que pasa es que en el caso del último día de un año bisiesto, continúa hasta que llega a 366. Debido al if (days>366) la ejecución para de sustraer si el bucle (loop) pasa a ser un año bisiesto. Pero 366 es demasiado grande para salir del bucle principal, lo que se traduce en que el Zune continue en el loop infinito sin hacer nada.

Si el error no se arregla, lo mismo va a suceder el 31 de diciembre del 2012… Microsoft, tienes 3 años… ¿alcanzarás?

Link: PQOAL Real-time clock (RTC) routines for the MC13783 PMIC RTC (Pastie.org)

Compartir Compartir
Publicado por Alexander Schek el 2 de January 2009 en la categoría Destacados, Software con los tags , , , , . Tiene 101 comentarios.

101 Comentarios

Autopsia al código fuente del Zune revela orden de suicidio

Deja tu Comentario ↓
x.org

DesaprobarAprobar29x.org dijo el 2-1-2009 a las 18:49:

1

Si no es mucha molestia, ¿Algún programador en el público nos puede explicar que pasa aquí?

eduardo dimare

DesaprobarAprobar3eduardo dimare dijo el 2-1-2009 a las 18:49:

2

lol!!!

Rhadamantis

DesaprobarAprobar2Rhadamantis dijo el 2-1-2009 a las 18:53:

3

jaja al ver esto me recordóa las clasesitas de PASCAL en el colgio xD

Gargadon

DesaprobarAprobar5Gargadon dijo el 2-1-2009 a las 18:54:

4

Completamente LOL, a ver si avisamos a los de Microsoft que el 2008 tuvo 366 días, y así cada cuatro años :D

LOL

DesaprobarAprobar6LOL dijo el 2-1-2009 a las 18:57:

5

@Rhadamantis

Es C#(sharp).

No entiendo que tiene de malo el booleano :P ,si mostraran todo el booleano se podrida deducir q esta malo.

Gon

DesaprobarAprobar62Gon dijo el 2-1-2009 a las 19:07:

6

@x.org: sucede que si consideras un año corriente de 365 días, el código es correcto. Pero en el otro caso, del año bisiesto, incurre en un loop infinito. El error fatal esta en el:

if (days > 366)

Que pregunta “si cantidad de días es mayor a 366″, o lo que es igual, si hay 367 o más días en este año, lo cual en ningún caso ocurre, por lo tanto el loop se vuelve infinito.
debería ser

if (days >= 366)

Lo chistoso fue la solución propuesta por MS de “cargar completamente el Zune, y luego cambiarle la fecha a 1 de enero de 2009 o mayor”. La pregunta es, ¿como diablos cambiarle la fecha si el susodicho aparata está bloqueado? Es como el “No se ha detectado teclado, presione enter para continuar”.

PS: Lo leí primero vía @fcatrin :B

lator1

DesaprobarAprobar-7lator1 dijo el 2-1-2009 a las 19:11:

7

quien usa Zune si asta la compañia que le hacia el MKT renuncio al water!!!

Perico

DesaprobarAprobar-11Perico dijo el 2-1-2009 a las 19:13:

8

no puede ser un codigo fuente tan flaite ni yo cuando estudie programacion hacia weas tan feas a puros IF JAJAJAJAAJAJAJAJa

Ver Comentario... Jorge dijo el 2-1-2009 a las 19:17 ...

Jorge

DesaprobarAprobar35Jorge dijo el 2-1-2009 a las 19:20:

10

ahhh ya la pille!!! si los dias son 366 nunca sale del loop

Gon: tienes razon, sorry por mi post apresurado

Zhekreb

DesaprobarAprobar3Zhekreb dijo el 2-1-2009 a las 19:22:

11

@LOL: seguramente, pero en un comentario inicial del codigo dice que el nombre del módulo (ese archivo) es rtc.c; lo que claramente implica que el código es C.

//——————————————————————————
//
// Module: rtc.c
//
// PQOAL Real-time clock (RTC) routines for the MC13783 PMIC RTC.
//
//——————————————————————————

Tu madre

DesaprobarAprobar0Tu madre dijo el 2-1-2009 a las 19:25:

12

Creo que el error ya esta solucionado, ya que solo ocurria en los Zune de 30 Gb.
Sera que estas personar nunca actualizaron su dispositivo.
En todo caso para que un Zune > Ipod, en muchisimos aspectos.

flaco

DesaprobarAprobar3flaco dijo el 2-1-2009 a las 19:26:

13

@LOL, no es C#, c# no tiene un atributo o clase BOOL

winjaime

DesaprobarAprobar4winjaime dijo el 2-1-2009 a las 19:28:

14

me pregunto cual será la solución “tipo microsoft” que habrá…Espero que no sea: “el 31 de diciembre de 2012 cambie la fecha a 1 de enero de 2013″ o algo asi

Gon

DesaprobarAprobar4Gon dijo el 2-1-2009 a las 19:28:

15

@flaco, no cuesta nada definir una constante TRUE O FALSE, en C.

Mr_Trukit0

DesaprobarAprobar2Mr_Trukit0 dijo el 2-1-2009 a las 19:32:

16

Jajajajaja el medio owned…

¿Y han lanzado alguna actualización de firmware?

Daniel

DesaprobarAprobar8Daniel dijo el 2-1-2009 a las 19:42:

17

Pasa hasta en las mejores familias…

oscar

DesaprobarAprobar-6oscar dijo el 2-1-2009 a las 19:52:

18

ajjajajaja, me recuerda la vez que sin querer maté el servidor anakena del DCC con una bomba fork :S

Kique

DesaprobarAprobar13Kique dijo el 2-1-2009 a las 19:53:

19

Cualquier parecido con el código fuente de cualquier otro producto de M$ es mera coincidencia...

mauro

DesaprobarAprobar0mauro dijo el 2-1-2009 a las 19:55:

20

Que chanta el error … la cago ..

Ver Comentario... Fray dijo el 2-1-2009 a las 20:03 ...

Algalord

DesaprobarAprobar4Algalord dijo el 2-1-2009 a las 20:04:

22

Seguramente habrá que descargarse la nueva versión del firmware, un parche que estimo estará disponible en unos tres años más.

Alfredo

DesaprobarAprobar0Alfredo dijo el 2-1-2009 a las 20:05:

23

Se ve que estuvieron apresurados para terminar con el Zune que tanto asi ni se diero cuenta del error (days>366) Esto es imposible ps!! jajaja

fuelforfire

DesaprobarAprobar5fuelforfire dijo el 2-1-2009 a las 20:11:

24

Por eso el software libre es tan popular, porque esa clase de errores estupidos de MS, se hubiesen arreglado en un par de dias, si se hubiese dado en una aplicacion opensource. Ademas, el arreglo se hubise hecho publico.

Saludos.

NecroX

DesaprobarAprobar26NecroX dijo el 2-1-2009 a las 20:21:

25

if (days = 367)
{
printf ("WTF?!");
}

alvaro

DesaprobarAprobar8alvaro dijo el 2-1-2009 a las 20:31:

26

Por un puro sigo “=” XD.

flaco

DesaprobarAprobar4flaco dijo el 2-1-2009 a las 20:33:

27

@Gon, obvio, pero para que vas a definir una constante true o false en c# si ya la tiene…
el punto, es que segun mi opinion, el lenguaje es C++

Tern

DesaprobarAprobar-6Tern dijo el 2-1-2009 a las 20:34:

28

No sé si sentirme orgulloso pq entiendo q es lo q dice el código o pegarme un tiro por pasar de sentirme Geek a Nerd……

NecroX

DesaprobarAprobar8NecroX dijo el 2-1-2009 a las 20:36:

29

if (days = 367)

{

printf(" WTF?!?! ");

}

Ver Comentario... JRRB dijo el 2-1-2009 a las 20:43 ...

Deja tu Comentario

XHTML: Puedes usar: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Previsualizar comentario?