2010/05/14

Como Brickar/Crashar um iPhone com um JPEG

De certeza que há muitas maneiras de lixar um iPhone... mas esta infelizmente descobri-a na primeira pessoa.

Ora bem, o iPhone não está isento de bugs na parte de visualização de imagens. Quando começaram a surgir as Apps que permitiram tirar fotos panorâmicas (com dimensões bem superiores às de uma única foto) rapidamente se descobriram inúmero bugs - um dos quais fazia encravar a câmara, e fazia com que todas as fotos aparecessem "pixelizadas" como se tivessem baixa resolução.

Supostamente, teria ficado resolvido com a versão 3.0 - e o que é certo é que nunca mais vi esse problema... até...

No outro dia, um amigo enviou-me uma foto por email. Uma simples imagem JPEG cuja única particularidade era ser ter a resolução de 3744x5616 (cerca de 21Megapixeis) e ocupar 3MB.


Uma vez que a App de Email do iPhone não me deixava fazer o zoom total da imagem (faz zoom até certo ponto - suficiente para a maioria das fotos de "baixa" resolução, mas não neste caso) decidi gravar a imagem para a galeria de fotos, e tentar vê-la lá.



Ora... mal clico na imagem, vejo a bem conhecida imagem "pixelizada" que atormentava os iPhone no tempo das imagens panorâmicas. E... mais nada! O iPhone crashou completamente e deixou de responder.
Mesmo o habitual procedimento de reset (pressionar continuamente no lock/home button durante vários segundos) demorou bastante mais tempo para que o iPhone reagisse... E o seu boot posterior, demorou igualmente um tempo anormalmente longo - muito mais que as dezenas de segundos habituais.

Estranho...

Foi então que um amigo ao meu lado me disse: "envia-me essa imagem, para eu testar no meu."

Dito e feito; enviei-lhe a imagem... e novamente... o mesmo efeito! Crashanço total e completo do iPhone.

Só que desta vez o caso foi bem mais grave. Depois de longo período de reset e boot, o iPhone "piscava" e voltava a fazer novo reboot... continuamente... sem parar...
Todas as tentativas de reset e de fazer um restore de todo o sistema, falhavam, retornando ao loop infinito de reboot. Ou seja... um iPhone tornado tijolo (bricked.)

(Entretanto a Vodafone já o substituiu por um iPhone completamente novo - do mal o menos! :)


Não sei se o problema terá a ver com esta imagem especificamente, ou se qualquer JPEG de dimensões similares poderá causar o mesmo efeito -  e como é lógico, não é algo que eu me sinta particularmente com vontade de testar mais a fundo, dada a possibilidade de brickar o iPhone.

Quanto aos motivos por que tal tenha sucedido... Não consigo imaginar nenhum caso onde a simples visualização de uma imagem pudesse causar tal coisa, ao ponto de impedir a recuperação do equipamento via um "restore" do firmware!


Já relatei este problema à Apple, e eles disseram que o problema poderá ser corrigido numa próxima versão beta do OS 4.0.

Até que isso suceda... Tentar ver imagens de 21Mpixeis na Camera Roll do vosso iPhone?... Façam-no por vossa conta e risco!


E coloca-se a questão, estará o iPad sujeito a este mesmo bug? Com o seu ecrã LCD de alta-qualidade e de maior resolução, será muito mais provável que fotográfos e utilizadores o usem como mostrador para fotos de alta-resolução... Se for esse o caso... ui ui...

Actualização (20/05/2010): aparentemente o problema já estará resolvido no OS 4.0 beta 4.

14 comentários:

  1. enquanto nos dão um equipamento novo, do mal o menos.

    mas continuo a achar um bug inadmissível o_0

    ResponderEliminar
  2. João Sousa14/5/10 10:08

    O facto de gostar da Apple e dos seus produtos (e usar pelo menos um deles) não me impede de ser objectivo. Há palavras que me vêm à mente quando li este texto: ridículo, patético e bizarro.

    Esta última - bizarro - é a que mais me assalta. Um jpeg paralisar uma máquina? É caso para perguntar "o que é que o rabo tem a ver com as calças". Uma coisa é despoletar um bug; outra coisa é corromper um sistema. O facto de num caso ter sido bem mais desastroso do que no outro torna o problema ainda mais espesso. Uma das coisas que eu gostava de saber era quanto espaço livre cada um de vós tinha no iPhone antes de despoletarem esta brincadeira...

    ResponderEliminar
  3. João, 1,5Gb de espaço livre.

    ResponderEliminar
  4. No meu teria cerca de 8GB livre, mas mesmo isso não seria factor justificativo. O iPhone pode ficar sem memória, mas não usa "swap file" na Flash (ou pelo menos, dizem-nos que não!) pelo que não deveria haver qualquer hipótese de corrupção do sistema a este ponto ao ver um simples flash.

    Quando muito, o jpeg poderá ter causado um buffer overflow, e ter executado código abritário e corrompido o sistema... Mas chegar ao ponto de lixar a própria hipótese de fazer "restore"... é mesmo grave.

    ResponderEliminar
  5. aonde tens o link para o JPEG?
    ja te disse q kero testar no magic e no N1

    ResponderEliminar
  6. Arranja aí a imagem para eu testar o Nexus1 :)

    ResponderEliminar
  7. João Lami14/5/10 10:40

    Carlos, personificando o Gregory House, não posso deixar de chamar a atenção para o facto de que o telefone com mais memória livre não ficou inutilizado. Nesta altura, receitaria antibióticos, ou esteróides, ou uma mistela qualquer, e o paciente teria convulsões ou entraria em fibrilação ventricular.

    De qualquer modo, fazendo uma busca rápida pela internet, fico com a ideia de que há algo de bastante tortuoso na visualização de imagens grandes no iPhone - crashes consistentes com imagens maiores do que 2k x 2k. Mas não notícias de inutilizar o sistema por completo. Quem sabe, talvez no caso do telefone parado tenha sido uma conjugação com outro(s) factor(es).

    ResponderEliminar
  8. @João

    Certo. Não ousei fazer mais testes tendo em conta o "risco" possível.
    De qualquer forma, mesmo o crashanço "repetível" é bastante anormal e é por si só já bastante grave.
    Tal como referi; é um crash que faz com que até um reset não actue como é suposto (em 4 ou 6 segundos) e o boot posterior demorou minutos em vez de 20 ou 30 segundos como é habitual.

    Daí que... seja sintoma de que algo de grave se passa "lá por trás."

    Não se pode aceitar que ver uma simples imagem possa ter tais consequências.

    ResponderEliminar
  9. Arranjei uma imagem na net com 21M. Não crasha o N1, mas zoom que é bom, tá queto :P

    ResponderEliminar
  10. "Já relatei este problema à Apple, e eles disseram que o problema poderá ser corrigido numa próxima versão beta do OS 4.0." Isto parece-me resposta default!

    ResponderEliminar
  11. @metRo_

    Não... Falei com um técnico por duas ou tres vezes, entre relatar o problema, enviar logs de crashes, etc.
    E depois ao fim, quando perguntei se eles tinham conseguido confirmar/replicar a situação é que ele me disse isso...

    ResponderEliminar
  12. Não há nada na internet sobre este assunto... o que é estranho porque há sempre muitas pessoas a tentar encontrar bugs e reportar problemas no iPhone (alguns inexistentes mesmo).
    Mas, para os que tentarem fazer isso, nada que não se resolva com uma simples app:
    http://www.ihackintosh.com/2009/07/irecovery-iphone-recovery-mode-loop-restart/

    ResponderEliminar
  13. Anónimo, o irecovery não resolve este problema! ;)

    ResponderEliminar
  14. Pois, foi um brickanço à séria... não houve forma de recuperar aquilo. Nem com nenhuma dessas técnicas. :/

    ResponderEliminar