|
早想整一下这个问题了,一直没样本,短信太少。
# s; R* J' O2 n3 O今天终于收到这样一个垃圾短信,可以分析一下了。$ B3 P1 J" e8 }# n$ R
短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,7 f! g5 Z- W) _& O; M( ^
其中有两个表涉及短信内容,7 |, L5 m; @; A4 f
一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条
$ f0 e- [0 i3 \ l* c# o x另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信# o5 a4 F5 i, L w+ b
其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,9 I, H4 q* y% |$ O4 C0 e' n
因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,
! s8 w& ?! T. B' Q$ |5 e; T E但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。& \- l! C1 _" F/ Y8 | Y' m
对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,$ t' [2 q. ^6 |+ p3 V
查下表,这个位置没有任何对应的字,% i' o- k6 q( ]1 ^. r4 J
是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。- o: Q. E* D: j& |0 x: K5 ` w. @+ p
于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。! [& v4 L7 d* i/ c3 a
进一步如何自动化解决?
; u; U+ U9 a7 p) t$ i6 ~8 Y一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。1 w& O; e3 K5 L! h- F
另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。6 r# o* S; Q: q" ~" v5 g0 u
再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?
" J" O+ _0 z+ U( P, T7 M附两个SQL语句,可以快速定位出错的条目
3 k1 \/ b6 H M. j n, B: g- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'. z7 n z" G2 h8 P6 X3 V: N y, W8 f0 j
- SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'
' J6 i# z+ ]$ Q2 F9 {0 ^4 B1 I
复制代码 |
评分
-
查看全部评分
|