|
早想整一下这个问题了,一直没样本,短信太少。
: K l5 v' P6 Q) Y今天终于收到这样一个垃圾短信,可以分析一下了。3 d6 @( P* [, m4 T0 t+ |% ~8 N
短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,' R- K9 T9 V, D; l8 Y7 `
其中有两个表涉及短信内容,
u( }( \& R9 u6 s+ a一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条
/ _% l. I" N1 N2 D2 R6 q1 e h' C另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信
8 u& y# d/ Q, i. b其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,
& K/ L' s$ T) u* I4 w k" I因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,
+ _" L/ L8 j0 `. `. q" P4 _6 g但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。
- Q# Q; i4 L% k* ?3 M o% U对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,
j$ P! i" `* H( y4 V: X0 j查下表,这个位置没有任何对应的字,. H. M* l/ t3 @
是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。8 e0 P/ c4 n* d; b
于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。0 c4 q$ A8 F. V' ^% C
进一步如何自动化解决?
% ~7 |/ {/ P8 H一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。
1 O1 L; t* n8 C1 ?; f4 y; ^2 Q( [# q另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。( H) R: b+ g9 j9 r" h
再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?6 m0 s( L0 D6 s+ k1 j. p
附两个SQL语句,可以快速定位出错的条目
. b$ b+ u7 X+ f! W5 `1 s: [! J- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'$ e) i- {% `- Z
- SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'
- M: `0 e% [" |% I! J
复制代码 |
评分
-
查看全部评分
|