|
早想整一下这个问题了,一直没样本,短信太少。
0 O* M& ]; A6 v) g今天终于收到这样一个垃圾短信,可以分析一下了。, g+ ^" K# c' n0 g- n# u
短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,
j Y' N3 O! D8 W9 M2 V其中有两个表涉及短信内容,7 g ?) _2 T$ H" ~
一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条
( w' H% R9 b, `$ s* V另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信
! p: j5 ~- A) D其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,% `$ Y& I7 E7 D1 \: s! S
因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,' R, O" O) I9 X( }8 J6 i8 o
但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。9 t0 f6 f r- _8 F5 {0 W/ `; i% ^
对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,6 V2 H) T; p8 ^4 ^3 Q3 u3 \% g: i
查下表,这个位置没有任何对应的字,+ d% }, Q g( ?7 }6 @
是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。
, {, i: Z* b5 s; x) ]0 P于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。
; \, I3 z' k' B% `进一步如何自动化解决?
- a# [6 W! b0 z8 I一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。
2 M7 _+ t, N" Q+ M4 k( _另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。# ^ D9 ^7 \" Y& P( z
再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?0 P$ o% t$ |( x& [
附两个SQL语句,可以快速定位出错的条目- % t) }( t, B! @* B, h( o
- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'" `# n1 V7 R* _4 v4 T/ g
- SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'( u7 m5 e1 x$ O: u
复制代码 |
评分
-
查看全部评分
|