怎樣淺顯地向技術小白解釋特殊阿拉伯字元串能導致 iOS 6 及 OS X 下大部分應用崩潰的原因?
03-13
為什麼特殊阿拉伯字元串能造成 iOS6和OS X下大部分應用崩潰?解決方案是什麼?
儘力了,可是確實看不懂上面的答案……
這麼晚還邀我回答是想讓我遲到么…
其實原問題的幾個回答已經把大部分細節都闡述出來了,我這裡就歸納一下吧。
首先是崩潰的直接原因。
目前基本能確定是 OS X 和 iOS 的 CoreText 和 WebCore 框架在處理複雜文字編排時出現了 bug,導致應用甚至 iOS SpringBoard(就是 iOS 的桌面)崩潰。這兩個框架非常基礎,絕大部分顯示文字的地方都會用到,也就導致了簡訊、微信和 QQ 等應用在顯示這些信息時會崩潰;而顯示推送的消息時,SpringBoard 也會受連累而崩潰(需要重啟手機才能繼續正常使用)。接著是這個 bug 出現的原因。
很遺憾 CoreText 並不是開源的,所以無法從源代碼中查出原因。但上文提到的複雜文字編排是套很複雜的機制,考慮到國內用戶可能無法訪問維基百科,我就簡單解釋下。我們熟知的中英文字元的編排是非常簡單的,一個文字對應一個字元,只要從左至右顯示出來即可。而阿拉伯字母、婆羅米系文字的天城文和泰語字母則不能簡單地進行這樣的編排,它們可能會進行如下變化:- 方向可能是從右向左顯示的。
- 多個字元可以組合成一個文字。
- 顯示的順序可能和邏輯順序不一致。
由於某種原因,OS X 和 iOS 在某些特殊的字元組合下並沒能正確地處理這種複雜的編排,而導致了程序崩潰。
那麼我們能做什麼呢?
如果喜歡嘗鮮的話,可以升級到 iOS 7 beta 和 OS X 10.9 beta,目前我只發現少數幾種情況下仍會崩潰(大多數人不會遇到)。如果 iOS 設備已越獄,可以去安裝 @麥子龍 提到的補丁(也可在 Cydia 的 178 源搜索「阿拉伯」),目測對於不需要複雜文字編排的用戶不會有問題。對於 QQ,只要不查看該消息即可。對於微信,我的處理方式是讓對方再發一條正常的信息,然後卸載並重裝(會丟失聊天記錄)。微信朋友圈比較好辦,只要看不到那條信息即可(叫對方刪除,等其他人刷朋友圈把那條消息踩下去,自己發張圖片把對方的消息踩下去,或拉黑對方都可)。
對於簡訊,據說讓對方再發一條正常的信息即可。(我沒收到過,無法確認。)對於其他應用(例如新浪微博、Twitter、郵件),可以登錄網頁版刪除或屏蔽。如果 OS X 的 Chrome 或 Safari 打開網頁崩潰,可以使用 FireFox 代替。還有對那些惡意捉弄你的人,該騙頓飯、斷絕關係、打官司什麼的請自行處理。
那麼服務提供商們又該做些什麼呢?知乎的員工今天很頭疼,因為絕大多數人用的都是 OS X 10.8 + Chrome / Safari 的組合,遇到這玩意幾乎全軍覆沒,發封郵件報告這個 bug 都會導致接收者的郵件客戶端崩潰。所以知乎很快對這些字元進行了處理,讓這些文字使用 Arial 字體顯示,就不會崩潰了。(目前已知 Arial 和 Tahoma 字體不會導致崩潰,其他我未測試。)知乎客戶端也用符號代替了這些字元,以避免崩潰。知乎日報客戶端則在用戶發表評論時禁止提交這類字元,避免其他人查看評論時崩潰。至於蘋果,就看它什麼時候更新了。考慮到 iPhone 5S 馬上要出了,可能就不會發布 iOS 6 的更新補丁,而是直接發布 iOS 7 了。而 OS X 10.8.5 是肯定會出的,就看修 bug 的速度了。而對於越獄開發者來說,則可能又是一個找越獄漏洞的機會。(不過看上去是很難支持 iOS 7 了。)推薦閱讀:
※Mac OS複製粘貼功能經常失效,問題出在哪裡?有何解決辦法?
※Bash(或者叫terminal?)的快捷鍵們
※做好應用從關注用戶反饋開始 - Sachsen
※為什麼讀者對國內技術書和作者的評價普遍較低?
