|
早想整一下这个问题了,一直没样本,短信太少。
% P; c, R8 j K2 A# p今天终于收到这样一个垃圾短信,可以分析一下了。9 p% Q4 }/ p) e' u+ w! g! m. z$ ]
短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,
0 V2 u: @! z; t9 j9 s, E' Y其中有两个表涉及短信内容,% y2 A, D- s* m( a
一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条
; I+ M- F) e S另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信$ I4 c, p4 ?* C, H) c
其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,% M& R0 N* O- j% o* S
因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,5 o# z- ~7 {! y2 H* ^" j
但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。4 F/ D6 }3 r2 _% |) E% |. [
对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,
1 E" s @3 r0 U0 A; _4 ]1 a查下表,这个位置没有任何对应的字,+ o# f* y- ~: m
是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。- W/ @! p9 d. o3 F
于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。
9 ? m5 i! H; x0 ~$ {- v进一步如何自动化解决?6 _# P$ f1 d5 y
一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。& ?4 z6 ?! _; I3 D6 f
另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。
. V1 X$ ]9 Z3 G! k: s* a' U/ @6 `$ i) c再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?7 J6 W( W1 P0 {
附两个SQL语句,可以快速定位出错的条目- 9 @0 D) w; f! q+ e. k
- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'
* R. R9 J, b4 P, T8 k! Z - SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'% `9 I/ L, `; x: q, E( Z7 w
复制代码 |
评分
-
查看全部评分
|