スマートフォン
 Computer >> コンピューター >  >> スマートフォン >> スマートフォン

テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体

テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体

Appleはここ数ヶ月、相次ぐバグに悩まされてきました。そして今、iPhoneのテキスト描画(テキストレンダリング)機能に新たな深刻なバグが発見されました。このバグは、テルグ語のたった1文字で引き起こされます。その文字を含む通知を受信しただけで、iPhoneが回復不能なブートループ(無限再起動状態)に陥ってしまうのです。なぜ1文字がiOSにこれほど重大な問題をもたらすのか、詳しく掘り下げてみましょう。

注意: テルグ語バグの修正は、最新版のiOS(11.2.6)で提供されています。もしテルグ語の文字によってアプリやデバイスがフリーズしてしまった場合は、iTunes経由でiPhoneを復元し、最新版のiOSへアップデートしてください。iPhoneがブートループから抜け出せない状態になっている場合は、iTunesに認識させるため、端末をDFU(Device Firmware Update)モードに移行する必要があるかもしれません。作業完了後は、事前に作成しておいた最新のバックアップからデバイスを復元しましょう。

テルグ語とは?

テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体

テルグ語は、インドの一部地域、具体的にはアーンドラ・プラデーシュ州、テランガーナ州、そしてヤナムという町で話され、書かれている言語です。アラビア語やその他のブラーフミー系文字を使用する言語と同様に、テルグ語もコンピューターの画面上に文字を表示するために、Unicode文字セットの特殊な機能を利用しています。

ラテン文字の多くは、ASCIIとの互換性のため、単一の8ビットUnicodeコードポイントで表現されます(例えば、アルファベットのAはUnicodeコードポイントU+0041に存在し、これは2進数では01000001として表されます)。一方、独自の文字体系を持つ非ラテン文字の言語では、通常、複数のUnicodeコードポイントを組み合わせて1つの文字を表現します。

これは、テルグ語のように文字をクラスター(群)として組み合わせる言語において特に顕著です。英語における装飾的な合字(リガチャ)とは異なり、テルグ語の各文字のつながりは言語学的に重要な意味を持っています。これに対応するため、Unicodeには、それぞれ固有のコードポイントを持つ文字同士を結合させる複雑なシステムが用意されています。

Unicodeコードポイントの膨大な数を考えれば、この仕組みはほぼ無限のバリエーションを生み出します。これらのコードポイントが組み合わさって、初めて読める1つの文字として描画されるのです。こうすることで、Unicodeはありとあらゆるテルグ語の単語ごとに個別のコードポイントを割り当てる必要がなくなります。代わりに、テルグ語の子音、母音、ダイアクリティカルマーク(「ウィラーマ」と呼ばれる符号)を組み合わせて、あたかも1文字であるかのように表示される単語を作り出します。同じことは、合字に関する正書法上の規則を持つアラビア語などの言語にも当てはまります。

クラッシュの原因は何か?

テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体

問題の引き金となっているのは、コードポイントU+200Cにある「ゼロ幅非接合子(Zero Width Non-Joiner: ZWNJ)」と考えられています。ZWNJは、隣接する2文字を通常の合字として結合させずに描画するよう指示する制御文字です。英語では、ZWNJを使うことで「ff」が標準の接続リガチャで印刷されるのを防ぎ、2つの「f」を分離して表示できます。ところが、このZWNJが特定の4つのテルグ語コードポイント(本来ならすべて結合して1つのクラスターになるはずのもの)と組み合わせると、なぜかiOSは結果を正しく表示できなくなってしまうのです。

AppleのSan Franciscoフォントがこの文字を表示できないことが原因だという説もあれば、Appleが採用している特殊なレンダリング処理に原因があるという説もあります。正確な原因こそ不明ですが、この文字を描画しようとした瞬間、MessagesやWhatsAppからSpringboard(ホーム画面)まで、描画を担当するあらゆるプロセスが劇的にクラッシュしてしまいます。この文字(「知識」を意味する「gya」)を構成するUnicodeコードポイントは以下の通りです:

  • U+0C1C ja(テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体)
  • U+0C4D ウィラーマ(ダイアクリティカルマーク)(テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体)
  • U+0C1E nya(テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体)
  • U+200C ゼロ幅非接合子(ZWNJ)
  • U+0C3E aa(テルグ語の1文字がAppleデバイスを文鎮化させる理由――iOSの深刻なバグの正体)

しかし、原因をゼロ幅非接合子(ZWNJ)だけに押し付けることもできません。実はZWNJは、家族の絵文字(👨‍👩‍👧‍👦)でも何の問題もなく日常的に使われています。どうやら、特定のコードポイントとZWNJの特定の組み合わせだけが問題を引き起こすようです。さらに厄介なことに、このZWNJはテルグ語のクラスターの描画に特別な影響を与えていないか、そもそもそこに存在すべきではない可能性すらあります。

その他のブラーフミー系文字の問題

この問題を抱えているのはテルグ語だけではありません。ベンガル語やデーヴァナーガリー語など、ブラーフミー系文字を同様の方法でUnicode処理している言語にも、同じ問題が存在します。Manish Goregaokar氏は、このクラッシュケースをさらに詳細に分解した興味深いブログ記事を公開しています:

デーヴァナーガリー語、ベンガル語、テルグ語における<子音1、ウィラーマ、子音2、ZWNJ、母音>というシーケンスは、以下の条件を満たす場合にクラッシュを引き起こします:

1. 子音2が後置結合型(pstf/vatu)である
2. 子音1がreph形式を形成しない文字である
3. 母音が2つのグリフコンポーネントを持たない

結論: なぜAppleはこのバグを見逃したのか?

このバグがなぜ見逃されたのかを理解するには、Appleの立場に立って考えてみる必要があります。確かに、この文字の組み合わせはテルグ語で特に珍しい言葉というわけではありません。しかし、iPhoneは数十もの言語をサポートしており、Unicodeには文字通り数十億もの潜在的な文字の組み合わせが存在します。それほど多様性が高いと、リリース前にUnicode関連のバグを網羅的にテストすることは事実上不可能になり、通常のソフトウェアアップデートの提供自体が困難になってしまいます。

とはいえ、このエラーがこれほど大きな被害をもたらすべきではありませんでした。テキストメッセージの中身だけで電話が文鎮化(ブリック)するのは避けるべき事態です。後知恵で言えば完璧ですが、Springboardをクラッシュさせるよりも、該当文字を疑問符ボックス()として安全に表示する方がはるかに適切だったでしょう。

  1. なぜ一部のWebサイトはスマートフォンだと表示が遅くなるのか?主な原因を解説

    モバイルデバイスは、世界のインターネットトラフィックにおいて目覚ましい進化を遂げてきました。Ciscoの調査によると、この爆発的な伸びは今後も続くとされ、2014年から2019年の間に世界中のモバイルデータトラフィックは実に10倍に増加しました。Webサイトを運営する側にとって、これは新しいタイプの訪問者へ対応する必要が出てきたことを意味します。そして、その対応の仕方(あるいは対応不足)によっては、同じURLをパソコンで開くよりもスマートフォンで開いたほうが読み込みが遅くなるという状況が生まれることがあります。これは一体どういうことなのでしょうか? モバイルは性能の低いサーバーへ振り分けられ

  2. iPhone・Mac・iPad・Apple WatchですべてのAppleデバイスでApple Payを使う方法【完全ガイド】

    Apple Payは、クリックやタッチ、Face IDの提示だけで、オンラインでもオフラインでも瞬時に支払いを完了できる、最も洗練された決済手段のひとつです。Mac、iPhone、iPad、Apple Watchで利用でき、店舗やアプリ内、Web上での安全な買い物に活用できます。さらに、メッセージアプリから直接連絡先の人とお金の送受信ができるのも大きな魅力です。まさにストレスフリーで安全な決済ツールと言えるでしょう。しかし、「iOSデバイスでApple Payをどう使えばいいの?」「実際にはどのような仕組みで動いているの?」と疑問に思っている方も多いはず。この記事では、iPhone、iPad、