Apple a un buggy depuis quelques mois. Nous avons maintenant un nouveau bogue sérieux dans la fonctionnalité de rendu de texte dans les iPhones. Le bogue est déclenché par un seul caractère Telugu qui peut amener un iPhone à entrer dans une boucle de démarrage incassable simplement en recevant une notification contenant le caractère. Examinons pourquoi un seul personnage peut causer des problèmes aussi importants avec iOS.
Noter: Un correctif pour le bogue Telugu est disponible dans la version la plus récente d’iOS (11.2.6). Si le personnage Telugu a verrouillé votre application ou votre appareil, restaurez votre iPhone via iTunes et mettez à jour vers la version la plus récente d’iOS. Si votre iPhone est bloqué dans une boucle de démarrage, vous devrez peut-être le mettre dans l’état Device Firmware Update (DFU) pour qu’iTunes le reconnaisse. Une fois terminé, restaurez votre appareil à partir de votre sauvegarde la plus récente, que vous avez créée, espérons-le.
Contenu
Qu’est-ce que le télougou ?
Le télougou est une langue parlée et écrite dans certaines parties de l’Inde, en particulier dans les États d’Andhra Pradesh, de Telangana et dans la ville de Yanam. Comme de nombreuses langues basées sur des scripts, telles que l’arabe et d’autres scripts brahmiques, le télougou utilise certaines fonctionnalités spéciales du jeu de caractères Unicode pour afficher ses caractères sur un écran d’ordinateur.
Alors que la plupart des lettres latines sont représentées par un seul point de code Unicode 8 bits pour la compatibilité ASCII (par exemple, la lettre UNE existe au point de code Unicode U+0041, qui est représenté en binaire par 01000001), les langues écrites avec des lettres script ou non latines combinent généralement plus d’un point de code Unicode pour représenter leurs caractères.
Cela est particulièrement vrai pour les langues, comme le télougou, qui combinent les versions linguistiques des lettres en groupes. Contrairement aux ligatures stylistiques de l’anglais, la connexion entre chaque lettre telugu est linguistiquement importante. Pour s’adapter à cela, Unicode comprend un système complexe d’attachement de caractères, chacun représenté par son propre point de code, les uns aux autres.
Compte tenu du grand nombre de points de code Unicode, cela peut créer une variété presque infinie. Ces points se combinent pour rendre un caractère lisible. De cette façon, Unicode n’a pas besoin d’un point de code Unicode pour littéralement chaque mot telugu possible. Au lieu de cela, Unicode combine des consonnes télougous, des voyelles et des signes diacritiques (« virama ») pour créer des mots qui s’affichent comme un seul caractère. La même chose s’applique à d’autres langues avec des règles orthographiques pour les ligatures, comme l’arabe.
Quelles sont les causes de l’accident ?
Le problème semble être lié au Zero Width Non-Joiner (ZWNJ) au point de code U+200C. Le ZWNJ demande que deux caractères adjacents soient rendus sans leur ligature typique. En anglais, un ZWNJ empêche les caractères ff d’être imprimés avec leur ligature de connexion standard, au lieu de séparer chaque f. Mais lorsqu’il est combiné avec un ensemble spécifique de quatre points de code Telugu (qui devraient tous être combinés en un seul cluster), pour une raison quelconque, iOS ne peut pas afficher le résultat correctement.
Certains ont émis l’hypothèse que la police San Francisco d’Apple ne pouvait pas afficher le caractère, tandis que d’autres ont déclaré que le processus de rendu spécifique utilisé par Apple était à blâmer. Quelle que soit la cause exacte, la tentative de rendu du personnage provoque un crash dramatique de tout ce qui le rend, de Messages et WhatsApp à Springboard. Les points de code Unicode qui composent le caractère (« gya » signifiant « connaissance ») sont ci-dessous :
Mais nous ne pouvons même pas blâmer le seul sans largeur de zéro (ZWNJ). Il est également utilisé dans les emojis familiaux inoffensifs (????) sans aucun problème. Cela semble être une combinaison spécifique de certains points de code spécifiques et du ZWNJ. Ajoutant l’insulte à l’injure, il semble que le ZWNJ n’ait aucun effet particulier sur le rendu de ce cluster Telugu ou qu’il ne devrait même pas être là en premier lieu.
Autres problèmes d’écriture brahmique
Cependant, le télougou n’est pas la seule langue à avoir ce problème. Bengali et Devanagari, qui utilisent Unicode de la même manière pour leurs scripts brahmiques, ont le même problème. Manish Goregaokar écrit un article de blog fascinant et détaillé qui détaille encore plus le cas exact du crash :
Toute séquence
1. consonne2 est une jointure par suffixe (pstf/vatu)
2. consonne1 n’est pas une lettre formant rep
3. la voyelle n’a pas deux composants de glyphe
Conclusion : pourquoi cela n’a-t-il pas été attrapé par Apple ?
Pour comprendre comment ce bug est arrivé, il faut se mettre à la place d’Apple. Bien sûr, cette combinaison de caractères n’est pas un mot super obscur dans la langue telugu. Mais l’iPhone prend en charge des dizaines de langues. Il existe littéralement des milliards de combinaisons potentielles en Unicode. Avec autant de variété, des tests significatifs pour les bogues Unicode avant une sortie rendraient pratiquement impossibles les mises à jour logicielles régulières.
Cependant, l’erreur n’aurait pas dû causer autant de dégâts. Les téléphones ne devraient pas être bloqués en fonction du contenu d’un message texte. Bien que le recul soit sûrement de 20/20, il semble que rendre le personnage sous la forme d’un point d’interrogation ( ) aurait été mieux que de faire planter Springboard.
Cet article est-il utile ? Oui Non