This page has been robot translated, sorry for typos if any. Original content here.

Le bug iMessage avec le texte en arabe vous permet de redémarrer à distance n'importe quel iPhone [FIX]

IOS a détecté un bug extrêmement désagréable. iPhone, qui est venu avec un message avec un certain ensemble de caractères, redémarre, et l'application "Messages" commence à tomber.

AVIS DE NON-RESPONSABILITÉ1: N'essayez pas de répéter cela avec les téléphones et les téléphones de vos collègues! A en juger par les commentaires, beaucoup de gens ont déjà infecté leurs téléphones, et 100% du médicament n'est pas encore disponible!

DISCLAIMER2: N'essayez même pas d'appeler le point Wi-fi!

DISCLAIMER3: Fonctionne également à travers les réseaux sociaux ou les messagers!

N'envoyez personne à l'iPhone !!!!

"Cliquez pour afficher le spoiler - cliquez à nouveau pour cacher ..."

Ouvrez le message-bug dans une fenêtre séparée (ne pas ouvrir avec l'iPhone!).

FIX

Il existe quelques moyens simples pour corriger l'erreur:

  • ouvre les messages sur la dernière conversation et envoie la réponse au joker;
  • si vous avez déjà ouvert des messages en mode liste de dialogues, demandez à l'ami de vous envoyer un autre message;
  • envoie-toi un message avec Siri;
  • créez une note et envoyez-la sous forme de message à votre numéro de téléphone à l'aide du bouton Partager.

Aussi sur Reddit a été décrit un médicament - vous devez envoyer des sms de n'importe quel contenu au nombre attaqué, et le pépin disparaîtra. Je vais expliquer - après le redémarrage du téléphone attaqué tout fonctionne bien jusqu'à ce que la victime veut lire les sms, c'est-à-dire téléchargez l'application intégrée Messages. Après avoir reçu un nouveau SMS de l'expéditeur du "virus", le dernier message sera un nouveau SMS et les messages, logiquement, cesseront de tomber.

Working FIX par shram.kiev.ua

Demandez à Siri de lire le dernier message non ouvert ("Siri a lu le dernier message non lu" ou "Siri a lu mon dernier message"), puis créez une note et envoyez-le vous-même à iMessage.

Une solution de contournement d'Apple

Jeudi soir, dans un nouveau document de support, Apple reconnaît ce bug qui a été découvert il y a deux jours, et propose une solution simple pour contourner temporairement ce problème en annonçant que le correctif sera disponible via des mises à jour logicielles dans un proche avenir.

Le soi-disant code de décès Unicode, également connu sous le nom "Effective Power", est dû au fait que le système tente de décoder les caractères Unicode provoquant une surcharge de la mémoire de l'appareil et le fait redémarrer. De nombreux utilisateurs signalent qu'ils ne sont pas en mesure d'ouvrir l'application iMessage après avoir reçu ce texte en arabe.

Apple a déjà transmis des déclarations aux médias, a confirmé ce bug, mais dans la nuit de jeudi, la société a publié un document officiel sur la reconnaissance du bug et le placement d'une solution temporaire pour cela.

Apple est conscient d'un problème iMessage causé par une série spécifique de caractères Unicode. Jusqu'à ce que la mise à jour soit disponible, vous pouvez utiliser ces étapes pour rouvrir l'application Messages.

Étape 1: Appuyez sur le bouton Accueil et maintenez-le enfoncé pour appeler Siri. Après l'activation, demandez à Siri "de lire les messages non lus".

Étape 2: Siri a lu le message (il est impossible de le parler correctement en anglais), puis il vous demandera si vous voulez répondre au message. Dis oui.

Étape 3: Dites quelque chose. Le contenu réel de la réponse n'a pas d'importance. L'important est d'envoyer un message.

Étape 4: Une fois la réponse envoyée, vous devriez être en mesure d'ouvrir l'application de messagerie. À partir de là, balayez l'écran pour supprimer la totalité de la conversation contenant une chaîne de caractères, ou appuyez et maintenez un message malveillant, cliquez sur Avancé, puis supprimez le message de la conversation.

Ce n'est pas le premier détour que nous avons vu dans ce numéro. Nous avons effectivement publié quelques options hier. Les personnes ayant des appareils piratés ont également la possibilité d'installer des astuces tierces qui empêcheront le problème de se produire en premier lieu.

Semblable à la société déclarante publiée plus tôt cette semaine, le soutien pour le document publié jeudi soir mentionne également la société émettra des correctifs en utilisant des mises à jour logicielles dans un proche avenir, apparemment avec le firmware 8.4, qui est encore dans la phase bêta.

Sur habrhabr.ru a écrit, si, après avoir reçu un tel message, essayez d'ouvrir les messages dans le mode liste de dialogue, puis l'application va commencer à tomber. "Messages" s'ouvrira si vous les lancez directement sur l'écran d'une conversation séparée. Cependant, lorsque vous essayez d'accéder à la liste des conversations, l'application va recommencer à tomber.

Nous avons essayé et nous nous sommes assurés que cela fonctionne vraiment. Et cela ne fonctionne pas nécessairement à partir de SMS - le texte était suffisant pour apparaître dans n'importe quel message push, par exemple de viber, watzup, vkontakte ou facebook et d'autres services.

Bien sûr, il ne s'agit pas d'un redémarrage ou d'un plantage, mais d'un plantage du sous-système graphique, qui provoque un redémarrage de l'ensemble du système. Parce que la fenêtre avec le texte du message push est directement incluse dans le shell graphique iOS, et n'est pas un widget séparé (comme, par exemple, sur Android), il est logique que toute erreur à un niveau aussi élevé désactive le système.

iMessages prend son envol pour la même raison que l'ensemble de l'iOS, à la seule différence - étant une application distincte, il ne provoque pas une baisse dans le thread principal d'iOS lui-même. Crash Messages est dû au fait que sur l'écran principal, vous voyez les textes des derniers messages envoyés et reçus.

Le projet habrahabr a créé un projet de test en xCode. Quand j'ai essayé d'ajouter un texte malheureux directement à Interface Builder, j'ai eu le crash de xCode lui-même, et il ne s'est pas ouvert jusqu'à ce que j'ai supprimé le projet de test du disque dur.

À la deuxième tentative, le texte arabe a été ajouté avec le code du fichier texte et après plusieurs tentatives, il a été découvert par essais et erreurs que:

  • UILabel n'a rien à voir avec ça, il ne peut même pas montrer le texte, s'arrêtant au mot Power;
  • UITextField est similaire.
  • UITextView a parfaitement affiché le texte intégral;
  • UIButton a généré un mauvais accès !!

C'est plus intéressant ici. Nous imprimons la trace complète de la pile avec la commande llvm-bt et obtenons ce qui suit:

  * thread n ° 1: tid = 0xf611cd, 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28, queue = 'com.apple.main-thread', arrêt de la raison = EXC_BAD_ACCESS (code = 1, adresse = 0x90)
  frame # 0: 0x00000001120ce5f3 CoreText`CopyFromStorage (TRunGlue &, long) + 28
  frame # 1: 0x00000001120ce283 CoreText`TRunGlue :: RotateGlyphs (CFRange, long) + 527
  frame # 2: 0x000000011212b71b CoreText`OpenTypeShapingEngine :: ApplyScriptShaping (unsigned int *) + 465
  frame # 3: 0x00000001120d0201 CoreText`TOpenTypeMorph :: ApplyShapingEngine (OTL :: GSUB et OTL :: GlyphLookups &, unsigned int *, CFRange, bool &) + 739
  frame # 4: 0x00000001120d1007 CoreText`TOpenTypeMorph :: ShapeGlyphs (bool &) + 331
  image # 5: 0x0000000112056c4e CoreText`TShapingEngine :: ShapeGlyphs (TLine &, TCharStream const *) + 264
  image # 6: 0x000000011205c48b CoreText`TTypesetter :: FinishEncoding (std :: __ 1 :: tuple  *, unsigned int, unsigned char> const &, TLine &, signe signé) + 127
  image # 7: 0x0000000112070586 CoreText`TTypesetterAttrString :: Initialize (__ CFAttributedString const *) + 674
  image # 8: 0x000000011207029a CoreText`TTypesetterAttrString :: TTypesetterAttrString (__ CFAttributedString const *) + 158
  frame # 9: 0x000000011205d79f CoreText`CTLineCreateWithAttributedString + 63
  frame # 10: 0x0000000110c6d8bd UIFoundation`__NSStringDrawingEngine + 18744
  image # 11: 0x0000000110c68f5f UIFoundation`- [NSString (NSExtendedStringDrawing) boundingRectWithSize: options: attributs: contexte:] + 198
  image # 12: 0x000000010e875788 UIKit`- [UIButton _intrinsicSizeWithinSize:] + 946
  image # 13: 0x000000010ec2466d UIKit`- [UIView (UIConstraintBasedLayout) intrinsicContentSize] + 37
  image # 14: 0x000000010ec24b6c UIKit`- [UIView (UIConstraintBasedLayout) _generateContentSizeConstraints] + 33
  image # 15: 0x000000010ec24930 UIKit`- [UIView (UIConstraintBasedLayout) _updateContentSizeConstraints] + 422
  image # 16: 0x000000010ec2bd25 UIKit`- [UIView (AdditionalLayoutSupport) updateConstraints] + 162
  image # 17: 0x000000010e87521b UIKit`- [UIButton updateConstraints] + 2925
  image # 18: 0x000000010ec2b346 UIKit`- [UIView (AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 242
  image # 19: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
  image # 20: 0x000000010e0bd354 CoreFoundation`CFArrayApplyFunction + 68
  image # 21: 0x000000010ec2b2ed UIKit`- [UIView (AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 153
  frame # 22: 0x000000010d9ef1be Foundation`- [NSISEngine withBehaviors: effectuer les modifications:] + 155
  image # 23: 0x000000010ec2b53e UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:] + 124
  image # 24: 0x000000010ec2ba0e UIKit`__60- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] _block_invoke + 96
  frame # 25: 0x000000010d9ef1be Foundation`- [NSISEngine withBehaviors: effectuer les modifications:] + 155
  image # 26: 0x000000010ec2b6d6 UIKit`- [UIView (AdditionalLayoutSupport) updateConstraintsIfNeeded] + 231
  image # 27: 0x000000010ec2bdde UIKit`- [UIView (AdditionalLayoutSupport) _updateConstraintsAtEngineLevelIfNeeded] + 146
  frame # 28: 0x000000010e623a3d UIKit`- [UIView (Hiérarchie) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] + 114
  image # 29: 0x000000010e62fa2b UIKit`- [UIView (CALayerDelegate) layoutSublayersOfLayer:] + 536
  frame # 30: 0x0000000111e08ec2 QuartzCore`- [Calayer layoutSublayers] + 146
  image # 31: 0x0000000111dfd6d6 QuartzCore`CA :: Calque :: layout_if_needed (CA :: Transaction *) + 380
  frame # 32: 0x0000000111dfd546 QuartzCore`CA :: Calque :: layout_and_display_if_needed (CA :: Transaction *) + 24
  frame # 33: 0x0000000111d69886 QuartzCore`CA :: Contexte :: commit_transaction (CA :: Transaction *) + 242
  frame # 34: 0x0000000111d6aa3a QuartzCore`CA :: Transaction :: commit () + 462
  frame # 35: 0x000000010e5ada2d UIKit`- [UIApplication _reportMainSceneUpdateFinished:] + 44
  image # 36: 0x000000010e5ae6f1 UIKit`- [UIApplication _runWithMainScene: transitionContext: achèvement:] + 2648
  image # 37: 0x000000010e5ad0d5 UIKit`- [UIApplication workspaceDidEndTransaction:] + 179
  image # 38: 0x0000000110d835e5 FrontBoardServices`__31- [FBSSerialQueue performAsync:] _ block_invoke_2 + 21
  image # 39: 0x000000010e0ea41c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
  image # 40: 0x000000010e0e0165 CoreFoundation`__CFRunLoopDoBlocks + 341
  frame # 41: 0x000000010e0dff25 CoreFoundation`__CFRunLoopRun + 2389
  image # 42: 0x000000010e0df366 CoreFoundation`CFRunLoopRunSpecific + 470
  frame # 43: 0x000000010e5acb42 UIKit`- [UIApplication _run] + 413
  frame # 44: 0x000000010e5af900 UIKit` UIApplicationMain + 1282
  * frame # 45: 0x000000010d91ed0f Islam`main (argc = 1, argv = 0x00007fff522e1330) + 111 à main.m: 14
  image # 46: 0x000000011076e145 libdyld.dylib`start + 1 

La dernière fonction documentée est CTLineCreateWithAttributedString, qui en principe ne nous donne rien. Le crash lui-même se produit dans la méthode CopyFromStorage (TRunGlue &, long) et, à en juger par le code assembleur, lorsque n octets sont copiés d'une partie de la mémoire à une autre (movq 0x90 (% rax),% rdx).

Je suppose que cela est dû à quelques différences dans le calcul de la longueur du texte arabe - apparemment, la longueur est calculée à deux endroits dans le programme par des méthodes différentes. Ici, je peux faire des erreurs et vous demander de corriger les gens qui savent.

Bug, apparemment, il y a autant que iOS, et a été vu, apparemment, par accident. A propos, le mot Power est inséré pour un mot rouge et ne joue pas de rôle. La signification du même texte que je n'ai pas pu identifier même en utilisant Google Translate (le dernier caractère - pas arabe, mais chinois, et signifie la redondance, qui semble faire allusion!). Peut-être à cause de la présence de caractères chinois et arabes en même temps?

Pour cela je prends congé, je souhaite tous les codes 200, construit sans exc_bad_access et stackoverflow et une fin agréable à la semaine de travail productive!