下面這段文字為什麼會讓 Mac 上的多個軟體閃退?

玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉[王]玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉

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

備註:為減少悲劇,已對上述字元串稍加修改(將原文本中的「王」字加了方括弧。實際使用中,只要刪去括弧,就會引發崩潰)。

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

這段文字的特點是:

  1. 幾乎全都是「玉」字。
  2. 有一個「王」字。
  3. 順序確定,更改順序則失去效果。

Mac 出現的問題有:

  1. QQ、微信、Spotlight 文本框中只要出現這段文字就閃退。
  2. Chrome,在知乎上看到這段文字沒事,編輯文本框只要有這段文字 Chrome 就會閃退。
  3. Chrome,任何一個文本框中輸入這段文字,Chrome 閃退。

最後一次修改答案:
我並不清楚最新版本的OS X是否修復了這個問題,也不知道這個bug是僅會發生在部分設備上還是如何,所以請不要在評論去反應「並不會崩潰啊」「根本什麼都沒發生啊」之類的內容,對於這類無聊問題我不會做任何回應。
對於已經確認可能導致嚴重後果,而且不主動作死是不會發生的問題,包括但不限於本文說的bug,iOS系統時間1970年白蘋果bug,在高鐵上吸煙,拉地鐵上的安全拉杆,飛機上宣稱自己帶了炸藥等等,
請不要嘗試,
請不要嘗試,
請不要嘗試。
當然如果你真的去嘗試,我無法阻止你。但在你做之前,請做好承擔因為你自己作死導致的數據丟失,iPhone變磚,被罰款及刑事拘留的心理準備。

————————————
tl;dr(Too long, Don"t read. 嫌太長不想看的,你只需要知道這一節的內容就可以了):
這是 OS X 的 bug ,與 iOS 無關,iPhone / iPad 用戶請不要擔心受到影響。根據其它回答里反饋的情況,並不是每台設備都會發生。
這段文字導致 App 發生崩潰的條件是:在文本框中出現;Mac 微信 / QQ 的對話中出現;選中。其它零散情況我沒有統計。
解決方法請直接拉到回答最後。
————————————
下面是完整答案:
我搞崩潰了一堆軟體後(。。), 檢查崩潰時的軟體調用棧,發現是 DataDectorsCore.framework 模塊出了問題。

雖然之前蘋果出過幾次問題都是因為 CoreText,而 CoreText 是 iOS 和 OS X 公用的組件。不過這次並不是 CoreText 的鍋,所以 iOS 用戶不會受到影響。

經DreamPiggy提醒,我找了一下蘋果的開發文檔中關於 NSSpellChecker 和 NSDataDector 的章節,發現 OS X 自帶的拼寫檢測和特殊格式的信息(比如電話號碼,時間等)匹配都會觸發 DataDectorsCore.framework。

所以可能導致崩潰情況,大致可以分為下面幾種:

  1. 文本編輯區域,一般都會觸發拼寫檢測,所以基本都會崩潰;
  2. 非文本編輯區域,一般不會觸發拼寫檢測和特殊格式的信息匹配,所以不會發生崩潰;
  3. 有些軟體,如 QQ 微信等,在展示文本時也會進行特殊格式信息匹配,因此會崩潰。需要指出,Safari 雖然不會自動檢測,然而在選中文本後還是會發生這個操作,所以請不要隨意選中這段文字。此外,在其它軟體下選中這段文字並右鍵點擊,也可能導致崩潰。

至於問題發生的具體原因,很抱歉,雖然不是 CoreText 的鍋,然而 DataDectorsCore.framework 和 AppKit 也都是閉源的,我沒辦法知道,只能給蘋果提交一個 bug report 了 (radr://911556)。不知道還有沒有人記得在13年的時候有一個類似的 bug,在 10.8 Mountain Lion 下任意位置輸入"File:///"也會導致軟體崩潰,我比較了一下那個 bug 的崩潰調用棧,兩個問題是因為同一個模塊導致的問題。

最後再次警告,請大家不要給用 Mac 的小夥伴發這個內容。拿這個整人可能會導致比較嚴重的結果,比如某些軟體一打開就崩潰之類的,而且截止至2015年7月,沒有解決方法,除非把出問題的軟體的數據刪除。
————————————

對於已經被坑而且一打開軟體就會崩潰的,比較輕鬆愉快的解決方案是裝個 cleanmymac,在 uninstaller 里選中出問題的軟體,點"Application Reset",點下方"Reset",問題解決。
如果沒有 cleanmymac 或類似軟體,可以嘗試如下方法:

  1. 對於微信,刪除 ~/Library/Containers/com.tencent.xinWeChat 目錄下所有文件
  2. 對於 QQ,刪除 ~/Library/Containers/com.tencent.qq 目錄下所有文件
  3. 其它軟體同理,刪除 ~/Library/Containers/ 下對應軟體的數據一般可以解決問題

需要注意,不管是用 cleanmymac 還是手動刪除文件的方法,該軟體的所有數據都會丟失,請千萬慎重。
————————————
7月22日補充一個可能的完美解決方案,不會導致你丟失數據。
打開「終端」,輸入下面的命令:

sudo mv -v /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system.backup

回車後需要輸入管理員密碼,需要注意你輸入的密碼的時候是不會看到字元反饋的。輸入完密碼再回車,如果沒有提示額外的信息那麼崩潰問題應該不會再出現了。如果提示 "Operation not permitted",那很遺憾我也沒找到解決的方法。如果其他人有更好的建議歡迎評論區補充。
————————————
感謝DreamPiggy的提醒,7月17日修改答案的錯誤原因部分。
7月17日晚修改,補充了問題解決方案。


作為最早發出這句話的人來解答一下大家關心的問題....

情況發生在北京某金融互聯網創業公司。題主在公司產品技術群里發了一堆「龑」裡面帶著「?」的,原因是公司有一個同事名字里有這個字,而在某個地方顯示為亂碼。
然後我覺得這種字太好找了,就在群里發了一堆玉裡面帶著王,也就是題主發的這段話。我習慣用Windows,而公司配的全是Mac。

然後我發現大家的反應和我預期的不一致....

因為然後其他同事的QQ就....

全崩潰了....

並且每次打開都會崩潰....

最後定位到是這段文字對於Mac的問題,所以有了題主這個問題....


題主,我跟你拼了


有必要在這裡好好的吐槽一下蘋果,我還是那句話,蘋果的程序員或者測試人員哪怕稍微長點心眼,也不至於把這種問題流出來。
幾年前發現蘋果的問題還心熱的向蘋果發出reports,後來發現低級而腦殘的問題數不勝數,就麻木了,愛咋樣咋樣。
針對這個問題,我猜可能是字元編碼沒處理好,借用輪子君的話,最近蘋果的系統被蚊子乾死的次數有點多…
吐槽完畢,我是真的希望蘋果軟體方面多用點心,做到內外一致很難,但很有必要。

裡面有個括弧很有嫌疑~


沒有好好做fuzzing嗎?


在網上查找了相關資料,發現Mac以前也出現過類似問題,我嘗試了類似的解決方法最後成功解決崩潰問題。
問題的解決方案:
http://blog.csdn.net/yongca887/article/details/46971119


請file radar

=======
更新一下,這個bug在El Capitan里已經被修復, seed 4會包括


因為蘋果是處女座呀


我在QQ上也重現了:
不過錯誤原因我也看不懂:

NSInternalInconsistencyException", reason: "condition "must be there"

Process: QQ [348]
Path: /Applications/QQ.app/Contents/MacOS/QQ
Identifier: com.tencent.qq
Version: 4.0.3 beta (18169)
Code Type: X86 (Native)
Parent Process: ??? [1]
Responsible: QQ [348]
User ID: 501

Date/Time: 2015-07-17 08:19:19.215 +0800
OS Version: Mac OS X 10.10.4 (14E26a)
Report Version: 11
Anonymous UUID: 54001059-9D4D-91A5-8E4B-B84B2EEF93BE

Sleep/Wake UUID: DD79D146-6A3E-4C7A-B501-6B2F1AE67EE4

Time Awake Since Boot: 57000 seconds
Time Since Wake: 470 seconds

Crashed Thread: 11 Dispatch queue: NSTextCheckingOperationQueue :: NSOperation 0x200c06b0 (QOS: USER_INITIATED)

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
*** Terminating app due to uncaught exception "NSInternalInconsistencyException", reason: "condition "must be there""

Application Specific Backtrace 1:
0 CoreFoundation 0x9776ec63 __raiseError + 195
1 libobjc.A.dylib 0x9740ea2a objc_exception_throw + 276
2 CoreFoundation 0x9776eb7d +[NSException raise:format:] + 141
3 DataDetectorsCore 0x98ac91e2 DDRaiseException + 67
4 DataDetectorsCore 0x98ae44d0 DDCrashv + 145
5 DataDetectorsCore 0x98ae4503 DDCrash + 27
6 DataDetectorsCore 0x98a9f170 DDScannerScanQuery + 729
7 DataDetectorsCore 0x98a9ea6a DDScannerScanStringWithRange + 319
8 AppKit 0x9497d751 checkDataDetectors + 161
9 AppKit 0x9497ac1a NSSpellCheckerCheckString + 16505
10 AppKit 0x94976b46 -[NSTextCheckingOperation main] + 162
11 Foundation 0x959f537e -[__NSOperationInternal _start:] + 770
12 Foundation 0x959f5071 -[NSOperation start] + 71
13 Foundation 0x959f4d8b __NSOQSchedule_f + 213
14 libdispatch.dylib 0x9ac74130 _dispatch_client_callout + 50
15 libdispatch.dylib 0x9ac77d05 _dispatch_queue_drain + 1017
16 libdispatch.dylib 0x9ac7999d _dispatch_queue_invoke + 186
17 libdispatch.dylib 0x9ac76f89 _dispatch_root_queue_drain + 395
18 libdispatch.dylib 0x9ac8663d _dispatch_worker_thread3 + 97
19 libsystem_pthread.dylib 0x97ac01da _pthread_wqthread + 724
20 libsystem_pthread.dylib 0x97abde2e start_wqthread + 30

Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x9c3559ce mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9c354a70 mach_msg + 68
2 com.apple.CoreFoundation 0x9766bef6 __CFRunLoopServiceMachPort + 214
3 com.apple.CoreFoundation 0x9766b309 __CFRunLoopRun + 1529
4 com.apple.CoreFoundation 0x9766aaa6 CFRunLoopRunSpecific + 390
5 com.apple.CoreFoundation 0x9766a90b CFRunLoopRunInMode + 123
6 com.apple.HIToolbox 0x960dc8f8 RunCurrentEventLoopInMode + 262
7 com.apple.HIToolbox 0x960dc631 ReceiveNextEventCommon + 494
8 com.apple.HIToolbox 0x960dc42c _BlockUntilNextEventMatchingListInModeWithFilter + 99
9 com.apple.AppKit 0x946fb721 _DPSNextEvent + 742
10 com.apple.AppKit 0x946fadc5 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 350
11 com.apple.AppKit 0x946ef77c -[NSApplication run] + 907
12 com.apple.AppKit 0x94664b80 NSApplicationMain + 2082
13 libdyld.dylib 0x925086d9 start + 1


我錯了,由高票答案來看是Cocoa框架(也就是AppKit)裡面的DataDetectorsCore.framework的問題,在調用一個用來檢查文本匹配的函數的線程時發生致命錯誤,看調用棧上可以看到是檢查匹配字串長度時發生問題(DDScannerScanQuery),很大可能是緩衝區溢出,不過真實原因未知…………看來不能老給CoreText背鍋的。


不過還是一句話,你又不敢反彙編,就算敢也只能悄悄的自己做,還是趕緊報Bug吧,你看Apple不是又來了一個Beta版嗎。

原答案:
-------------------------------------------CoreText.framework 歷史問題了,要麼是緩衝區溢出,要麼是指針錯誤,反正都是閉源的Library,你也不知道裡面到底出了什麼錯,反彙編又怕Apple找你,所以還是老老實實報Bug等著Apple修復吧。

Core Text Overview
看看這文檔的編輯歷史,你就知道歷史包袱有多重了


把鏈接分享給用mac的碼農和土豪朋友們,並且寫上絕對不要這樣做!非常危險!
然後他們紛紛抗拒不了好奇心手賤了……


謝邀。


這是蘋果故意的,蘋果的設計一向很有深意,設計成這樣是為什麼我暫時還不知道,大家一起來探討吧。


嗯,昨天公司的phper拿這段破文字戲耍了全技術部門的mac....


一開始我是不信的 直到

就只是本文文檔啊,就這樣了。讓我情何以堪??


從崩潰信息可以看到是在NSTextCheckingOperationQueue線程中崩潰的,這是一個執行文本檢查的線程。
其實之前蘋果就出過幾次類似問題,比如」Fill:///」崩潰問題。都是DataDectorsCore.framework這個framework的問題,
這個庫的主要作用是自帶的拼寫檢測和特殊格式的信息(比如URL、電話號碼、時間等)匹配都會觸發 DataDectorsCore.framework。
我查找了」Fill:///」崩潰問題的解決方案,於是也嘗試了同樣的方案解決這個問題,果然不出所料的不再崩潰了!
解決崩潰問題的方法就是:
在終端運行以下兩條命令:

sudo mv -v /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.urlifier.system /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.urlifier.system.backup

  • 1

sudo mv -v /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/Resources/com.apple.datadetectorscore.cache.full.asia.system.backup


我想修改問題描述,可是mac上知乎一編輯問題,連chrome都閃退了……所以麻煩別人幫我改一下問題描述吧……

目前已發現的問題有:
1.必須上面這段話一字不差(裡面有一堆 玉 和一個 王),順序也不能變
2.知乎上查看問題不會閃退,編輯時,文本框里只要有這段話,chrome就會閃退
3.spotlight中粘貼這段話也會閃退


看到這段文字,出於熱心想把這個問題轉發到小範圍的一個公眾號提醒下朋友,結果,不知道是哪個字上的bug,只要點保存、或者預覽、或者保存並發送,整個頁面的圖片、標題、內容就全部變成了空白。好可怕。出現這個狀況之後,感覺整個電腦都不好了^


這是feature,不是bug


玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉王玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉玉

好像沒問題?mac的看看~


推薦閱讀:

有哪些比較好的 OS X 軟體推薦網站?
macOS (OS X) 有哪些常用的快捷鍵?
Mac 電腦小白應該了解哪些東西?
如何在 OS X 上架設本地代理伺服器對 iOS 流量進行抓包分析?
Mac 下需要整理磁碟碎片嗎?

TAG:MacBookAir | macOS | 蘋果公司AppleInc | Bug |