Por qué un personaje telugu está atacando los dispositivos de Apple

Apple ha tenido algunos meses de problemas. Ahora tenemos un nuevo y serio error en la funcionalidad de renderizado de texto en iPhones. El error es provocado por un solo carácter telugu que puede hacer que un iPhone entre en un ciclo de arranque irrompible con solo recibir una notificación que contiene el personaje. Profundicemos en por qué un solo personaje puede causar problemas tan importantes con iOS.

Nota: Hay una solución para el error Telugu disponible en la versión más reciente de iOS (11.2.6). Si el personaje Telugu ha bloqueado su aplicación o dispositivo, restaure su iPhone a través de iTunes y actualice a la versión más reciente de iOS. Si su iPhone está atascado en un bucle de arranque, es posible que deba colocarlo en el Estado de actualización de firmware del dispositivo (DFU) para que iTunes lo reconozca. Cuando termine, restaure su dispositivo desde su copia de seguridad más reciente, que con suerte creó.

¿Qué es el telugu?

telugu-personaje-chocando-ios-2

El telugu es un idioma hablado y escrito en partes de la India, específicamente en los estados de Andhra Pradesh, Telangana y en la ciudad de Yanam. Como muchos lenguajes basados ​​en escrituras, como el árabe y otras escrituras brahmicas, Telugu usa algunas características especiales del juego de caracteres Unicode para mostrar sus caracteres en la pantalla de una computadora.

Si bien la mayoría de las letras latinas están representadas por un único punto de código Unicode de 8 bits para compatibilidad ASCII (por ejemplo, la letra UNA existe en el punto de código Unicode U+0041, que está representado en binario por 01000001), los idiomas escritos con escritura o letras no latinas suelen combinar más de un punto de código Unicode para representar sus caracteres.

Esto es especialmente cierto para los idiomas, como el telugu, que combinan las versiones de las letras de los idiomas en grupos. A diferencia de las ligaduras estilísticas del inglés, la conexión entre cada letra telugu es lingüísticamente importante. Para adaptarse a esto, Unicode incluye un sistema complejo de adjuntar caracteres, cada uno representado por su propio punto de código, entre sí.

Teniendo en cuenta la gran cantidad de puntos de código Unicode, esto puede crear una variedad casi infinita. Estos puntos se combinan para generar un carácter legible. De esta manera, Unicode no necesita un punto de código Unicode para literalmente todas las palabras posibles en telugu. En cambio, Unicode combina consonantes, vocales y diacríticos (“virama”) en telugu para crear palabras que se muestran como un solo carácter. Lo mismo se aplica a otros idiomas con reglas ortográficas para ligaduras, como el árabe.

¿Qué causa el accidente?

telugu-character-crashing-ios

El problema parece estar relacionado con Zero Width Non-Joiner (ZWNJ) en el punto de código U+200C. El ZWNJ solicita que dos caracteres adyacentes se procesen sin su ligadura típica. En inglés, un ZWNJ evita que los caracteres ff se impriman con su ligadura de conexión estándar, en lugar de separar cada f. Pero cuando se combina con un conjunto específico de cuatro puntos de código Telugu (todos los cuales deben combinarse en un solo grupo), por alguna razón, iOS no puede mostrar el resultado correctamente.

Algunos han especulado que la fuente San Francisco de Apple no puede mostrar el carácter, mientras que otros han dicho que el proceso de renderizado específico que usa Apple es el culpable. Cualquiera que sea la causa exacta, el intento de renderizar el personaje provoca un colapso dramático de lo que sea que lo esté renderizando, desde Mensajes y WhatsApp hasta Springboard. Los puntos del código Unicode que componen el carácter (“gya” que significa “conocimiento”) se encuentran a continuación:

Pero ni siquiera podemos culpar solo a Zero Width Non-Joiner (ZWNJ). También se usa en los emojis familiares inocuos (?‍?‍?‍?) Sin ningún problema. Parece ser una combinación específica de algunos puntos de código específicos y ZWNJ. Para colmo de males, parece que el ZWNJ no tiene un efecto particular en la representación en este grupo telugu o que ni siquiera debería estar allí en primer lugar.

Otros problemas de escritura brahmica

Sin embargo, el telugu no es el único idioma con este problema. Bengali y Devanagari, que usan Unicode de manera similar para sus escrituras brahmicas, tienen el mismo problema. Manish Goregaokar escribe una publicación de blog fascinante y detallada que analiza aún más el caso exacto del accidente:

Cualquier secuencia <consonant1, virama, consonant2, ZWNJ, vowel> en Devanagari, Bengali y Telugu, donde:

1. consonant2 es sufijo-uniónpstf/vatu)
2. consonant1 no es una letra reformulada
3. vowel no tiene dos componentes de glifos

Conclusión: ¿Por qué no lo captó Apple?

Para entender cómo pasó este error, debes ponerte en el lugar de Apple. Claro, esta combinación de caracteres no es una palabra muy oscura en el idioma telugu. Pero el iPhone incluye soporte para docenas de idiomas. Hay literalmente miles de millones de combinaciones potenciales en Unicode. Con tanta variedad, las pruebas significativas de errores Unicode antes de un lanzamiento harían que las actualizaciones regulares de software fueran prácticamente imposibles.

Sin embargo, el error no debería haber causado tanto daño. Los teléfonos no deben bloquearse en función del contenido de un mensaje de texto. Si bien la retrospectiva seguramente es 20/20, parece que representar el personaje como un cuadro de signo de interrogación ( ) habría sido mejor que bloquear Springboard.

¿Es útil este artículo?

Puedes compartirlo con alguien que le pueda interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *