bug-1

Hace unos días se ha puesto muy de moda un truco mágico descubierto por los elfos de santa claus (es decir, nadie reconocido, sino que ha brotado en los blogs de las manzanas como esporas) acerca de como «crashear» casi cualquier aplicación.

Rios de tinta han corrido de par en par por la gente que ha copiado otros blogs, como tomándolo como algo «gracioso» y que no pasa nada aunque realmente no es así.

Ante todo, vamos a explicar cual es el verdadero problema del asunto. El caso es que cualquiera con mínimos conocimientos de HTML sabrá que para hacer referencias locales (de tu ordenador local) a ficheros si, con http indicamos que buscamos algo vía protocolo http (ósea el típico del navegador), con https usamos http seguro, con file, estamos indicando que es un fichero local de nuestro equipo. Como podemos ver en la documentación de Microsoft y que gentilmente nos ha buscado el enlace iberhack_ en Applesfera.

Entonces, cuando en una caja de abrir archivo, un dialogo de dime que archivo tengo que abrir o guardar, metemos algo que comience con «file://» le estamos indicando que es una referencia a un archivo local. Sí, la caja, el dialogo, no interpreta bien como se lo estamos metiendo, pega una excepción, que podemos ver en OpenRadar:

"CFStringHasPrefix(urlVal, CFSTR("file://"))" failed :wrong extraction: File:///

Donde bien claro indica que quiere abrirlo estilo «web» al detectar el prefijo, pero que no es capaz de abrir el fichero «/» (que es el raíz de nuestro equipo).

Muchos, gratuitamente, han lanzado que es problema del auto corrector del sistema y un bug en el mismo al intentar «corregir sintácticamente file://» lo que, como se ve, es del todo falso.

Entrando un poco más en el asunto, es del todo falso en parte ya que de donde todos han cogido la fuente, TheNextWeb, que van de «techniques» sobrados guays o «ninjas» como diría alguno conocido, hablan de que peta el proceso NSSpellCheckerCheckString cuando no es un proceso sino una función y dudamos que haya muchas funciones que lancen procesos aparte para realizar su trabajo.

Pero, volviendo al tema, dan más pistas de el porque del problema. Al parecer el dialogo del sistema de abrir fichero, usado por el 99% de los programadores ya que ahorra trabajo al suponerse que hace bastantes cosas, como sacar un árbol de ficheros de tu equipo con ciertos filtros configurables (cuando le llamas) y que te devuelve la ubicación exacta del fichero que el usuario necesita, esta mal programado y tiene un bug.

Sí, se hace la picha un lío al ser un NSString lo que devuelve sin comprobar lo que se mete en el (algo que hacemos todos los programadores ya que si en una caja un usuario solo puede meter números, va a meter números, letras, eñes, acentos y la madre que lo parió por el simple hecho de que es idiota) y no han preparado bien la función que lo recibe, lo trata y lo envía a nuestra aplicación para que revise que cojones esta metiendo el señorito, saltando en algunos sitios el autocorrector (NSSpellCheckerCheckString) y en otros marchando al guano directamente.

Ojo, esto solo pasa en aquellas aplicaciones que usan el cuadro de dialogo estándar compilado para OSX 10.8, no aquellas compiladas para sistemas anteriores o que no usan el cuadro de dialogo estándar de abrir fichero y el programador ha hecho sus propias comprobaciones (o no).

Es caso es que es un bug, y un bug es. Grave o no, es un bug que se resolverá (o no) en una actualización. Pero tampoco hay que correr tantos ríos de tinta por este problema bastante absurdo salvo que con el se pueda conseguir el root de nuestro equipo y alguna aplicación «maligna» lo use para hacer cositas malas. Es decir, que se ha montado un cirio increíble por algo no tan grave (como paso con Java y ese bug si era peligroso al haber rootkits que ya lo estaban usando).

Por eso, tranquilos, hay bugs que son graciosos y otros que son peligrosos, este es del primer tipo (por ahora). Pero lo que si es importante es antes de dar las noticias, relajarse un poco, no copiar y pegar y, en cada sitio que se jacta de ser «la cream de la cream» tener gente especializada en cosa ya que al ser seguido por mucha gente en vez de informar, desinforma… lo que si que es peligroso comparado con este bug.

Vía: Cualquier blog