在信息應用程式中出現的奇怪錯誤層出不窮,但這次的問題卻讓人困惑:當試圖發送以「Dave and Buster’s」為內容的音頻消息時,系統會無法完成這一操作。為何特定的短語會造成這樣的問題?一位編程專家已揭示了其中的原因,這個解釋充滿趣味性。
首先,解釋一下當這個錯誤發生時的情況。起初,音頻消息(例如「我去 Dave and Buster’s 吃午餐」)看起來正常發送,並顯示在接收者的消息線程中,還附帶了內容的轉錄文本,似乎並不存在任何問題。
然而,問題發生在接收者那裡。接收者最初看到的是省略號圖標,這表明消息正在發送中……但這個狀態持續了一段時間,最终消失。此時,接收者並沒有收到任何消息:沒有消息、沒有消息轉錄文本,也沒有消息發送失敗的通知。事實上,如果接收者沒有打開應用程序,或是在不同的對話線程中,他們根本無法得知有消息正在到來。
這個Bug對於許多人來說都是新鮮事,筆者第一次聽說是在星期一的博文中,該博文由編程及工程專家 Guilherme Rambo 撰寫。Rambo 是從「Search Engine」播客中得知這個問題的,該播客於 5 月 9 日專門討論了這一主題。
Rambo 重現了這個錯誤,猜測問題可能在接收者那一端,然後把該設備連接到他的 Mac 上查看日誌。從此之後,他很快就弄清楚發生了什麼:iOS 的轉錄引擎在識別這家美國餐飲連鎖店名稱時,將其轉換為正確的品牌名稱(「Dave & Buster’s」,中間的 & 符號至關重要),然後將其傳遞到用於發送音頻消息的 XHTML 代碼中。問題不在於「Dave and Buster’s」這幾個字,而在於它們之間的 & 符號,這在編碼中具有特殊用途,會妨礙代碼的正確解析。
在英國,短語「Dave and Buster’s」並不會引發同樣的問題,因為 iOS 並不會加上 & 符號(甚至連撇號也不會)。如上圖所示,雖然看似已成功發送的音頻 iMessage 以短語「Dave & Buster’s」結尾,但接收者的手機上卻從未顯示過該消息。過了一段時間,發送者手機上的音頻消息也消失了,接收者完全不知道該消息曾經被發送。
這樣的問題對於其他品牌來說,可能也會造成類似的情況,目前尚未發現。Rambo 指出,「M&Ms」也會導致相同的結果。實際上,對於英國的 iPhone 用戶來說,由於這個連鎖店似乎不太知名,系統的自動糾正功能不會添加 & 符號,因此「Dave and Buster’s」不會觸發該錯誤。
為了重現這個問題,筆者請了一位朋友給我發訊息,內容涉及超市連鎖 M&S。果然,這也導致了懸停的省略號,隨後出現了一條未發送的消息。在撰寫本文時,幾乎可以確定 iOS 識別的任何包含 & 符號的短語都可能導致音頻消息失敗,這樣看來,這個錯誤並未受到廣泛報導實在令人驚訝。
不過,可以樂觀地認為,這是個應該容易在 iOS 更新中修補的錯誤。Messages 中的轉錄功能只需告訴系統「轉義」特殊字符,以避免損壞解析過程。正如 Rambo 所指出的,這個錯誤不存在任何安全漏洞,實際上,它顯示出 Apple 的 BlastDoor 機制運行正常。
「許多糟糕的解析器可能會接受格式不正確的 XHTML」,他寫道,「但這種對數據格式解析的寬容性往往會造成安全問題。通过对格式的严格要求,BlastDoor 保护接收者免受可能利用这一问题的攻击。」