引起微信閃退的“兩位數字+15個句號”BUG的原理是怎樣的?

BreakingNews發表於2017-09-25

在微信中發“兩位數字+15個句號”(另一說法是任意數字,任意15個標點符號),如果有非小米三星的安卓手機收到,就會卡死,這個BUG的原理是怎樣的?
沒有加號,如直接發“15。。。。。。。。。。。。。。。”就行。

起因

有人 v2 發了以下內容:


沒想到第二天一傳二,二傳四,利用這個 bug 搞怪的人越來越多

反應

@空寂

哪些機型會卡死

@口貝力

  • 米6,OK
  • 蘋果,OK
  • 蘋果,OK
  • 蘋果,OK
  • mate9,卡死
  • 三星,卡死
  • 360,卡死

分析

@kbkaa :華為已卡死,看了下logcattraces.txt,是這個java.util.regex.Matcher.findNextImpl(Native method)的鍋,好像是正則匹配的問題,估計是把匹配操作放在UI主執行緒裡了,處理超時導致ANR。可能是字元解析超時 5s 就會崩潰。
具體分析請看:為什麼“15。。。”會導致微信ANR? - 掘金

歷史問題

下面這段字元為什麼會讓手機QQ未響應?

Y.oo.O.oo.z.oo.yY.oo.0.oo.z.oo.0.oo.0.oo.y.oo.z.oo.Z.oo.Z.oo.Y.oo.O.oo.Y.oo.Y.oo.Z.oo.y.oo.O.oo.o.oo.Y.oo.z.oo.y.oo.Y.oo.y.oo.y.oo.Y.oo.o.oo.0.oo.Z.oo.O.oo.o.oo.Y.oo.0.oo.0.oo.y.oo.O.oo.0.oo.Z.oo.z.oo.Y.oo.Y.oo.y.oo.Y.oo.Y.oo.z.oo.Y.oo.Y.oo.Y.oo.0.oo.O.oo.z.oo.y.oo.O.oo.O.oo.0.oo.Y.oo.Y.oo.0.oo.0.oo.o.oo.Z.oo.yY.oo.y.oo.0.oo.o.oo.yY.oo.y.oo.z.oo.0.oo.o.oo.Z.oo.yY.oo.0.oo.yY.oo.yY.oo.o.oo.Y.oo.Y.oo.0.oo.0.oo.Y.oo.z.oo.z.oo.o.oo.yY.oo.o.oo.o.oo.Y.oo.0.oo.z.oo.0.oo.o.oo.Y.oo.O.oo.0.oo.0.oo.y.oo.0.oo.Y.oo.Y.oo.Z.oo.0.oo.0.oo.z.oo.yY.oo.O.oo.o.oo.Y.oo.o.oo.Y.oo.Z.oo.z.oo.y.oo.yY.oo.0.oo.O.oo.Y.oo.O.oo.y.oo.o.oo.yY.oo.Y.oo.o.oo.Z.oo.O.oo.Z.oo.z.oo.Y.oo.y.oo.yY.oo.yY.oo.Y.oo.z.oo.o.oo.yY.oo.O.oo.Y.oo.O.oo.O.oo.O.oo.O.oo.Y.oo.

(篇幅有限,測試時可以將這段字元多複製幾遍)
——————————————
手機QQ上顯示到有這段字元的訊息時會卡死並導致程式崩潰,Android版和iOS版QQ都會受到影響。

解答

這串程式碼造成手機QQ卡死的原因是是判斷 url 的正規表示式執行時間過長導致的,安卓和蘋果都會卡頓一段時間。

回顧

  1. 微信在5月份也有一次發動圖就會讓 iPhone 閃退的bug。
  2. 再之前發泰國或者阿拉伯文字卡死

解決辦法

臨時解決辦法

  1. 過一會兒重新進入微信,然後刪除聊天記錄。
  2. 或者大家頂過去那條訊息

目測是微信官方人員.....

有人說已經修復完成,不知道有沒有掛的人了.....微信的熱修復還是牛逼啊!(但是不斷有人反饋掛了,等微信官方釋出吧)

補充

在微信群發相關內容被遮蔽

小米:20。。。。。。。。。。。。。。。。。。。。 還是會炸...(小米6不會)
魅族:還是掛...

插播新聞:微信啟動圖片將換成我國衛星成像圖

今天17:00起,手機微信開啟時顯示的地球圖片將從以前的美國衛星成像圖換成風雲四號的成像圖。9月25日至9月28日期間,使用者在微信啟動時,可以欣賞到由我國新一代靜止軌道氣象衛星“風雲四號”從太空拍攝的祖國全景。這是6年來微信啟動頁面首次發生變化,啟動頁背景中的地球圖片也由非洲大陸上空視角,變化為了我們的祖國上空。

相關文章