Package: sqlite3 Version: 3.9.2-1 Severity: wishlist File: /usr/share/man/man1/sqlite3.1.gz
Mention on the man page that by default the SELECT command will dangerously silently truncate your data, and that it would be much safer using .dump, and passing the output to another program. $ sqlite3 es0.db 'select * from networkqueue_items limit 1' | cat -v 21|network_post_request_handle|1448001952173|0| M-|M-=^A^RM-xM-=^A NBottom few choices lack confirmation. Misplaced fingers easily blow away data.^R.1448001787787.5gWu6TQLuvJ4cEkWP1KR6V3URzyU0fbqP^AM-`^A $ sqlite3 es0.db '.dump networkqueue_items' | fold | head PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE networkqueue_items(_id INTEGER PRIMARY KEY AUTOINCREMENT,handle TEX T NOT NULL,item_creation_timestamp INT,item_state INT,item_data BLOB); INSERT INTO "networkqueue_items" VALUES(21,'network_post_request_handle',1448001 952173,0,X'0AFCBD0112F8BD010A4E426F74746F6D206665772063686F69636573206C61636B206 36F6E6669726D6174696F6E2E204D6973706C616365642066696E6765727320656173696C7920626 C6F77206177617920646174612E122E313434383030313738373738372E356757753654514C75764 A3463456B5750314B5236563355527A7955306662715001E00100E80100A202F7BB0112F3BB01100 11AB8BB016956424F5277304B47676F414141414E5355684555674141414C5141414146414341594 $ sqlite3 es0.db '.dump networkqueue_items' | perl -nwle "for (/X'(.*)'/g){print pack(q(H*), \$_); exit;};" |cat -v | fold | head M-|M-=^A^RM-xM-=^A NBottom few choices lack confirmation. Misplaced fingers easily blow away data.^ R.1448001787787.5gWu6TQLuvJ4cEkWP1KR6V3URzyU0fbqP^AM-`^A^@M-h^A^@M-"^BM-wM-;^A^R M-sM-;^A^P^A^ZM-8M-;^AiVBORw0KGgoAAAANSUhEUgAAALQAAAFACAYAAAAVuVaJAAAABHNCSVQICA gIfAhkiAAAIABJREFU eJzsvXdwHNeZr/305BkMcs4kSJBIBKOYs2WRlFaygiVb0trKlu5W7S1dX3u/9e56fV0bHGrXJe/a K62stSxbpGWTVKAoiUkkRYoZDCAJgBCIQOQMTM7d3x/wtDEEmEDSFNvnqUIVpuf0OW93//r06Z4+ 708CFAQCbdCou9URCAQ3EsOtDkBwCXQGkMNXXdygg7B8E+O5BKaEFAoeeJqk/CkM15/m/MaX//RB jELiKoYcs+bOwmq2cuzoMcLhS+9ks9mM1WpFkqRxv3c4HMjy2L1eWl6Ky+UaNzqX04VjyHGlEG9T $ sqlite3 -line es0.db 'select item_data from networkqueue_items'| tr \\n \ |perl -pwle 's/item_data = /\n/g;'|perl -nwle 'print for /.............$/g;'|cat -v|head zyU0fbqP^AM-`^A rUyRWKgP^AM-`^A bl4J2r0P^AM-`^A f4bhzDOP^AM-`^A 14eBmcCP^AM-`^A 2wRU1SxP^AM-`^A 2kvCCP5P^AM-`^A g38FXd3P^AM-`^A m4YSb6EP^AM-`^A j98cuunP^AM-`^A Thus we see the above certain series of bytes truncates SELECT's output! Here's what I had to do to not have my data scathed: $ cat Makefile # Recover my queued Android Google Plus offline posts! # They are in /data/data/com.google.android.apps.plus/databases/es0.db second_step: for i in o*; do perl -nwle 'print if s/.*(iVBOR)/$$1/ .. /cs_01_/;' $$i|sed '$$d'|base64 -d > $$i.png; done first_step: sqlite3 /tmp/es0.db '.dump networkqueue_items' | perl -nwle \ "for (/X'(.*)'/g){open \$$FH, q(>), q(o) . \$$k++; print \$$FH pack(q(H*), \$$_); close \$$FH;};"