Dlaczego niektóre wiadomości tekstowe Unicode powodują awarię iPhone'a?

31

Ostatnio w ciągu ostatnich kilku tygodni pojawiła się nowa „usterka” w Internecie, jeśli jeśli użytkownik iPhone'a zostanie wysłany:

  effective. 
      Power
           لُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ
 冗

przez iMessage powoduje tymczasowe zawieszenie systemu operacyjnego telefonu i wymusza ponowne uruchomienie telefonu odbierającego.

Dlaczego to działa?

Shaun Loftin
źródło
3
W rzeczywistości uważam, że wymagane są tylko znaki arabskie (i może te po nich). Tekst „mocy efektywnej” jest tylko wypełniaczem i może być dowolny, ale powinien być wystarczająco długi, aby powiadomienie zostało obcięte (lub przynajmniej próbuje, ponieważ to powoduje awarię) obcych znaków.

Odpowiedzi:

36

Jeśli potrzebujesz poprawki, użyj Siri lub komputera Mac za pomocą iMessage, aby wysłać sobie nową wiadomość. Zobacz https://support.apple.com/en-us/HT204897

Jest to trzyetapowa procedura odzyskiwania, a przyszła aktualizacja oprogramowania usunie ten błąd.

  1. Poproś Siri o „odczytanie nieprzeczytanych wiadomości”.
  2. Użyj Siri, aby odpowiedzieć na złośliwą wiadomość. Po udzieleniu odpowiedzi będziesz mógł ponownie otworzyć Wiadomości.
  3. Jeśli problem będzie się powtarzał, dotknij i przytrzymaj złośliwą wiadomość, dotknij Więcej i usuń wiadomość z wątku.

Dlaczego tak się dzieje, jest to szczególny błąd w sposobie, w jaki Centrum powiadomień renderuje treść tej wiadomości w formacie Unicode. Kod wykonuje „niebezpieczną” operację (coś podobnego do 5 podzieloną przez 0, a następnie nie sprawdza nieoczekiwanych wyników), która powoduje nieobsługiwany błąd.

Następnie, ponieważ Centrum powiadomień nie może wyrenderować bloku tekstu i ostatecznie powoduje awarię Springboard, który nie miał kodu, który z wdzięcznością poradziłby sobie z tym niepowodzeniem. Gdy nie jest dostępna żadna konkretna procedura obsługi błędów, większość operacji ma bezpieczny „restart”, aby spróbować naprawić błąd.

Unicode to sposób kodowania znaków używanych w językach, które mają większą liczbę znaków niż angielski. Programiści mogą mieć z tym problemy, ponieważ nauczyli się programować przy użyciu tekstu ASCII i zaniedbują pisanie swojego oprogramowania z pełną obsługą Unicode.

Jeden dobry artykuł na ten temat wyjaśnia „jeśli nadal programujesz w ten sposób, nie jesteś dużo lepszy od lekarza, który nie wierzy w zarazki”.

Ten drugi artykuł dobrze wyjaśnia tę konkretną sytuację.

Apple może albo dokonać dokładniejszych recenzji kodu, przeprowadzić specjalne testy jednostkowe, albo pozwolić użytkownikom końcowym na testowanie kodu w podobny sposób w tym i podobnych przypadkach .

tron_jones
źródło
6

Apple może to naprawić.

Problem wydaje się wynikać ze sposobu, w jaki telefon próbuje wyświetlić wiadomość w powiadomieniach. Znaki powodują awarię tego systemu, dlatego na krótko próbuje go pokazać przed awarią, a następnie ponownie ustawić telefon, aby go naprawić.

Oto kilka krótkoterminowych poprawek, które możesz zrobić, dopóki Apple nie naprawi problemu.

  • Poproś osobę, która wysłała Ci złośliwą wiadomość, o przesłanie kolejnej wiadomości, skutecznie anulując początkową część

  • Wyślij sobie wiadomość przez Siri, arkusz udostępniania lub z komputera Mac.

  • Inny czytelnik zauważa, że ​​„wysłanie zdjęcia do kontaktu za pośrednictwem aplikacji Zdjęcia może pozwolić mu uzyskać dostęp do historii wiadomości i usunąć rozmowę”

źródło: http://www.redmondpie.com/how-to-fix-ios-text-messages-crash-bug/

Ruskes
źródło