小黑点卡死渲染引擎

背景

app上面出现了一种小黑点,类似下面这种的。

简单来说,如图所示的这个“黑点”表情,发送和接收都没有问题,但当点击它的时候,就会造成当前程序卡死崩溃。

原理

Unicode的国。Unicode是计算机之间传输文本的国际标准,包含数以万计的字符,并且支持N种语言。

在Unicode之中也有一些隐形的字符,比如定义宽度、定义从左向右(从右向左,阿拉伯/希伯来语使用)、定义连接词、定义高低音的代码。这个黑点的“诡计”就在于,使用OBJ编码后发现,我们看到的黑点之后其实还有一长串字符,编造者使用宽度为0、且定义左右顺序的字符进行了隐藏。

当你点击时,安卓的文本渲染器需要判断你点击的是哪个,这个过程存在BUG,导致程序崩溃。ios也可能存在。chrome也可能存在。

解决方案

str.replace(/特征字符/,’’)