引起微信闪退的“两位数字+15个句号”BUG的原理是怎样的?

40020

在微信中发“两位数字+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年来微信启动页面首次发生变化,启动页背景中的地球图片也由非洲大陆上空视角,变化为了我们的祖国上空。