|
早想整一下这个问题了,一直没样本,短信太少。
9 u. \6 d/ E7 t m9 V今天终于收到这样一个垃圾短信,可以分析一下了。" R5 F8 |( P5 T( u& S
短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,4 X8 D- }) D% \! m7 N8 _: d
其中有两个表涉及短信内容,6 x( V( o, [' |3 n" D+ I
一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条+ i, M! x2 }. t$ w" k) O
另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信
9 j6 l) o$ f3 C6 a& I) g! l* q% [0 ~其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,' \: K; L% o9 Z* z
因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,3 }% V* c* u" L$ m' z
但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。1 ]7 v/ g9 d' h& h2 ?2 l! T1 [
对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,
7 G$ h% F" r0 `) V查下表,这个位置没有任何对应的字,, K) w" }0 v: V& N$ j: Q, _
是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。 n2 X+ l# {; g- k' ~2 ^; \
于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。
' H( D! _* d$ }/ y9 l进一步如何自动化解决?
" Z9 F9 N' Z9 l- Y; K一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。3 q2 l. n" M! ]. I! ], U8 o# G
另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。
' a* s3 A. Z# _% S8 c; e6 m* x* [, x% F0 ^再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?
: W5 j( N8 Z2 \附两个SQL语句,可以快速定位出错的条目- . n5 e7 `. v+ D9 I8 c# Z5 i3 s; W4 _
- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'
* p0 r: r' [) E& Z - SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'
% F. o. Q( A# n
复制代码 |
评分
-
查看全部评分
|