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;};"

Reply via email to