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

IMessage Bug mit arabischem Text können Sie aus der Ferne jedes iPhone neu starten [UPDATE]

In iOS entdeckt extrem fiesen Fehler. iPhone, die eine Nachricht mit einem bestimmten Satz von Zeichen empfangen, startet neu und die „Nachrichten“ -Anwendung beginnt zu fallen.

DISCLAIMER1: Versuchen Sie dies nicht mit ihren Handys und Telefone von Kollegen! Gemessen an den Kommentaren, viele Menschen sind bereits mit ihren Handys infiziert und 100% -tnogo Medikamente noch!

DISCLAIMER2: Versuchen Sie nicht , auch als Wi-Fi - Punkt zu nennen!

DISCLAIMER3: Funktioniert auch durch alle sozialen Netzwerk oder messandzhery!

Vertrauen Sie nicht auf das iPhone senden !!!!

»Klicken Sie Spoiler zeigen - klicken Sie erneut zu verstecken ...“

Öffnen Sie eine Nachricht, einen Fehler in einem separaten Fenster (nicht via iPhone öffnen!).

FIX

Es gibt einige einfache Möglichkeiten , um den Fehler zu beheben:

  • Öffnen Sie die Nachricht an das letzte Gespräch und eine Antwort auf die Joker senden;
  • Wenn Sie bereits die Meldung im Dialogmodus, um die Liste geöffnet, fragen Sie einen Freund Ihnen eine andere Nachricht zu senden;
  • sich, selbst eine Nachricht mit Hilfe von Siri senden;
  • notieren und senden Sie es als Nachricht an Ihre Telefonnummer die „Share“ -Taste.

Auch auf Reddit beschrieben, ein Medikament - es ist erforderlich, SMS von Inhalten an Nummer senden angegriffen, und die Glitch verschwindet. Lassen Sie mich erklären - nach gut, solange alle angegriffen Telefon funktioniert Neustart als das Opfer will nicht die SMS lesen, das heißt Laden Sie die Firmware-Nachrichten-Anwendung. Nach dem Empfang neue SMS aus dem „Virus“ des Senders, wird die Nachricht die letzte und die Nachrichten neue SMS sein, ist es logisch ist, wird aufhören, es zu fallen.

ARBEITS FIX von shram.kiev.ua

Stellen Sie Siri die letzten ungeöffneten Nachrichten zu lesen ( „Siri las letzte ungelesene Nachricht“ oder „Siri meinen letzten Beitrag lesen“), erstellen, nachdem eine Notiz aus und sendet es an dich selbst von iMessage.

Temporäre Lösung von Apple

In chertverg Nacht, in der neuen Dokument, Unterstützung, erkennt Apple diese Fehler, der vor zwei Tagen entdeckt wurde, und bietet eine einfache Lösung vorübergehend , indem er erklärt die Korrektur , um dieses Problem zu arbeiten , wird durch ein Software - Update in naher Zukunft zur Verfügung steht.

Der sogenannte Unicode-Code des Todes, der auch als „Effective Power“ bekannt ist, ergibt sich aus der Tatsache, dass das System versucht, Unicode-Zeichen zu dekodieren, wodurch Speicherüberlastung ustrystv und bewirkt, dass es neu zu starten. Viele Anwender haben berichtet, dass sie nicht in der Lage sind, die iMessage-Anwendung zu öffnen, nachdem diese arabischen Text zu empfangen.

Apple, napravilyala frühere Aussagen zu den Medien, bestätigten den Fehler, aber am Donnerstagabend hat das Unternehmen ein offizielles Dokument über die Anerkennung des Fehlers und legen Sie eine temporäre Lösung für diese veröffentlicht.

Apple ist bekannt, ein iMessage Problem durch eine bestimmte Reihe von Unicode-Zeichen verursacht, und wir werden ein Update verfügbar in einem Software-Update machen. Bis das Update verfügbar ist, können Sie diese Schritte verwenden, um die Nachrichten App erneut zu öffnen.

Schritt 1: Drücken und halten Sie die Home - Taste Siri zu bringen. Nach Activ von Siri ated fragen „ungelesenen Nachrichten lesen.“

Schritt 2: Siri Art die Nachricht lesen (es unmöglich ist , es tatsächlich zu sagen , in der richtigen Englisch), und dann wird es fragen , ob Sie eine Nachricht beantworten mögen. Sagen Sie Ja.

Schritt 3: Sagen Sie etwas. Der eigentliche Inhalt der Antwort ist irrelevant. Was wichtig ist, ist, eine Nachricht zu senden.

Schritt 4: Wenn die Antwort gesendet wurde, sollten Sie in der Lage sein , die Nachrichten - Anwendung zu öffnen. Von dort aus, streichen Sie die gesamte Konversation enthält eine Reihe von Zeichen, oder drücken und halten Sie die bösartige Nachrichten, klicken Sie auf Erweitert, und löschen Sie die Nachricht aus dem Gespräch zu löschen.

Dies ist nicht die erste Problemumgehung wir in dieser Ausgabe gesehen haben. Wir tatsächlich mehrere Optionen gestern veröffentlicht. Menschen mit geschwächten Geräten haben auch die Fähigkeit von Drittanbietern zwickt zu installieren, um das Problem zu verhindern wird in erster Linie auftreten.

Wie die Berichterstattung Unternehmen in dieser Woche ausgestellt früher erwähnt das Support-Dokument am Donnerstagabend veröffentlichte auch das Unternehmen wird ein Update veröffentlichen, offenbar mit Firmware 8.4, die noch im Beta-Stadium ?? Software-Updates in der nahen Zukunft.

Auf habrhabr.ru geschrieben, wenn nach einer solchen Nachricht empfangen, versuchen Sie die Meldung im Dialogmodus, um die Liste zu öffnen, beginnt die Anwendung zu fallen. „Meldungen“ werden geöffnet, wenn sie direkt auf dem Bildschirm einer separaten Diskussion führen, aber wenn Sie in die Liste der Gespräche zu gehen versuchen, wird die Anwendung beginnt wieder zu fallen.

Wir versuchen, und stellen Sie sicher, dass es wirklich funktioniert. Und die Werke sind nicht unbedingt von der SMS - Text war genug, um in jeder Push-Nachricht angezeigt werden, beispielsweise aus viber, zu, VKontakte und Facebook und anderen Dienstleistungen.

Natürlich ist dies kein Neustart oder Absturz, und Crash-Grafik-Subsystem, das einen Neustart des gesamten Systems führt. da Fenster mit dem Text-Push-Nachrichten direkt in der iOS GUI enthalten, und nicht ein einziges Widget (wie in Android), ist es logisch, dass jeder Fehler auf einem so hohen Niveau wird das System außer Gefecht bringen.

iMessages nimmt aus dem gleichen Grund wie die gesamte iOS, mit dem einzigen Unterschied aus - eine eigenständige Anwendung zu sein, ist es nicht der Fall meisten iOS provozieren Mainthread. Nachrichten Absturz ist aufgrund der Tatsache, dass auf dem Hauptbildschirm können Sie die letzten SMS-Nachrichten gesendet und empfangen sehen.

Habrahabr auf dem Projekt erstellt ein Testprojekt in xCode. Wenn Sie versuchen, Text direkt in dem unseligen Interface Builder hinzufügen, erhielten wir einen Absturz von xCode, und es öffnet sich nicht, bis dahin, bis Sie ein Testprojekt von der Festplatte löschen.

Beim zweiten Versuch wurde arabischen Text Code aus einer Textdatei hinzugefügt, und nach mehreren Versuchen, durch Versuch und Irrtum festgestellt, dass:

  • UILabel damit zu tun, kann es nicht einmal Text angezeigt werden , bleibt auf dem Wort Power;
  • UITextField ähnlich;
  • UITextView perfekt Volltext darstellen;
  • UIButton erzeugt schlechten Zugang !!

Es ist schon interessanter. Wir drucken einen vollständigen Stack-Trace bt llvm-Team aus und bekommen so etwas wie die folgenden:

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

Die letzte Funktion ist CTLineCreateWithAttributedString dokumentiert, wir im Grunde nichts. der Crash selbst erfolgt innerhalb einer Methode CopyFromStorage (TRunGlue &, lang) und nach dem Assembler-Code zu der Zeit in der Länge von einem Teil des Speichers zu einem anderen (movq 0x90 (% Rax)% RDX) lang n Bytes zu kopieren.

Ich nehme an, dass es geschieht aufgrund einiger Unterschiede bei der Berechnung der Länge des arabischen Textes - offenbar, die Länge in zwei Teilen des Programms in unterschiedlicher Weise berechnet wird. Hier konnte ich falsch sein und kenntnisreich Leute fragen zu verbessern.

Der Fehler scheint so viel und iOS zu existieren und wurde offenbar durch Zufall gesehen. By the way, eingefügt das Wort der Macht für die Wirkung und Rollenspiele. Die Bedeutung des Textes ich nicht einmal erkennen konnte mit Google Translate (das letzte Zeichen - nicht Arabisch und Chinesisch, und ist Redundanz, die würde andeuten). Vielleicht aufgrund der Anwesenheit von chinesischen und arabischen Zeichen zur gleichen Zeit?

Hinter diesem Urlaub, ich wünsche Ihnen alle Codes 200, baut ohne EXC_BAD_ACCESS und Stackoverflow und das Ende eines produktiven Arbeitswoche genießen!