下面這段字元為什麼會讓手機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群中測試。測試需謹慎!如果被朋友打了,題主概不負責QAQ)


作為題主,昨天被損友坑得很慘 QAQ,不過自己又坑了更多人 233。還是來試著分析下什麼原因吧。

題主用的是Android 5.1,先通過USB調試,看看QQ顯示含有這段字元的消息時都有些什麼Log。發現Log中這兩條消息可能和問題有點關係:

08-10 00:58:17.230: W/linker(15881): libcodecwrapperV2.so has text relocations. This is wasting memory and prevents security hardening. Please fix.

08-10 00:58:26.270: I/art(15268): Wrote stack traces to "/data/anr/traces.txt"

前面一條Log中記錄的libcodecwrapperV2.so這個庫的確是QQ用的,但是沒有更多Log記錄這個庫相關的信息,它和QQ未響應有什麼關係就不得而知了。(好像剛有什麼線索,但是線索又斷了QAQ)

幸好發現了後面這條Log,Android的ANR(Application Not Responding)將程序未響應時的stack traces記錄到"/data/anr/traces.txt"這個文件。

在traces.txt文件中找到了未響應時QQ的主線程在幹什麼(一般來說,Android程序未響應的原因是主線程/UI線程發生阻塞),下面是一部分記錄:

Cmd line: com.tencent.mobileqq

DALVIK THREADS (66):

"main" prio=5 tid=1 Native

(Java_java_util_regex_Matcher_findNextImpl__JLjava_lang_String_2_3I+146)

at java.util.regex.Matcher.findNextImpl(Native method)

at java.util.regex.Matcher.find(Matcher.java:358)

- locked &<@addr=0x14263840&> (a java.util.regex.Matcher)

at com.tencent.mobileqq.text.QQText.a(ProGuard:1355)

at com.tencent.mobileqq.text.QQText.&(ProGuard:312)

at com.tencent.mobileqq.text.QQText.&(ProGuard:248)

at com.tencent.mobileqq.data.MessageForLongMsg.doParse(ProGuard:146)

at com.tencent.mobileqq.data.ChatMessage.parse(ProGuard:68)

- locked &<@addr=0x13d92ef0&> (a com.tencent.mobileqq.data.MessageForLongMsg)

at com.tencent.mobileqq.activity.aio.ChatAdapter1.getItemViewType(ProGuard:173)

at com.tencent.widget.HeaderViewListAdapter.getItemViewType(ProGuard:291)

at nvr.b(ProGuard:7608)

......

據此推斷,QQ未響應的原因可能與長消息解析、正則匹配中的問題有關。這從一定程度上說明了為什麼類似的字元(如:OO00.oo)也會產生同樣的效果,以及為什麼這類字元長度達到一定數量才會產生效果。

——————————————

以上個人推斷僅供參考


反饋給手Q項目組的朋友了…

已經在修復。

原因我不了解,哈哈哈


這串代碼造成手q卡死的原因是是判斷url的正則表達式執行時間過長導致的,安卓和蘋果都會卡頓一段時間,現在問題在修復。


手賤是一種怎樣的體驗?

……

現在一點開QQ界面里我的電腦就卡死(我把這段字元發送到我的電腦里了)……題主你賠錢!!〒_〒


實測WP8.1,lumia830 卵事沒有。。複製了10遍


剛才還想發貼吧玩玩 仔細一想後果會很嚴重。。。 有同樣想法的請三思


魅藍NOTE2 實測不卡


經測試,iPhone6和Note3都會卡,一加和刷了CM12.1的G2則不卡,不知道什麼原因。


在電腦上刷屏或者登陸http://wed2qq.com刷屏即可


哎呀,我去!真卡了!


我把這段文字通過郵件分享到QQ群(QQ輕聊版),然後還是可以正常使用,好奇怪


媽蛋我也卡住了,朋友的iPhone也會


卧槽,我發到一個群,結果所有人在手機QQ上都點不了那個群,一點就掛。


MAC下 copy到微信,,, 轉菊花了。。。。。

剛才還在大學同學群里發了。,,,mb. 被罵死了。。


求救。。。。。。。


...


推薦閱讀:

為什麼說android系統沒有IOS系統安全?
Android 圖標快捷方式和 iOS 3D Touch方式有何不同?未來哪種交互方式更值得推崇?
為什麼 iOS 漢語拼音鍵盤不把「v」改成「ü」?
如何評價 iOS 版 Evernote 5.0 的產品重構?
App 裝得多會讓 iPhone 變卡么?

TAG:騰訊QQ | iOS | Bug | Android |