Annotation of embedaddon/sqlite3/test/corrupt6.test, revision 1.1.1.1

1.1       misho       1: # 2008 May 6
                      2: #
                      3: # The author disclaims copyright to this source code.  In place of
                      4: # a legal notice, here is a blessing:
                      5: #
                      6: #    May you do good and not evil.
                      7: #    May you find forgiveness for yourself and forgive others.
                      8: #    May you share freely, never taking more than you give.
                      9: #
                     10: #***********************************************************************
                     11: # This file implements regression tests for SQLite library.
                     12: #
                     13: # This file implements tests to make sure SQLite does not crash or
                     14: # segfault if it sees a corrupt database file.  It specifically focuses
                     15: # on corrupt SerialTypeLen values.
                     16: #
                     17: # $Id: corrupt6.test,v 1.2 2008/05/19 15:37:10 shane Exp $
                     18: 
                     19: set testdir [file dirname $argv0]
                     20: source $testdir/tester.tcl
                     21: 
                     22: # Do not use a codec for tests in this file, as the database file is
                     23: # manipulated directly using tcl scripts (using the [hexio_write] command).
                     24: #
                     25: do_not_use_codec
                     26: 
                     27: # We must have the page_size pragma for these tests to work.
                     28: #
                     29: ifcapable !pager_pragmas {
                     30:   finish_test
                     31:   return
                     32: }
                     33: 
                     34: # Create a simple, small database.
                     35: #
                     36: do_test corrupt6-1.1 {
                     37:   execsql {
                     38:     PRAGMA auto_vacuum=OFF;
                     39:     PRAGMA page_size=1024;
                     40:     CREATE TABLE t1(x);
                     41:     INSERT INTO t1(x) VALUES('varint32-01234567890123456789012345678901234567890123456789');
                     42:     INSERT INTO t1(x) VALUES('varint32-01234567890123456789012345678901234567890123456789');
                     43:   }
                     44:   file size test.db
                     45: } [expr {1024*2}]
                     46: 
                     47: # Verify that the file format is as we expect.  The page size
                     48: # should be 1024 bytes.
                     49: #
                     50: do_test corrupt6-1.2 {
                     51:   hexio_get_int [hexio_read test.db 16 2]
                     52: } 1024   ;# The page size is 1024
                     53: do_test corrupt6-1.3 {
                     54:   hexio_get_int [hexio_read test.db 20 1]
                     55: } 0      ;# Unused bytes per page is 0
                     56: 
                     57: integrity_check corrupt6-1.4
                     58: 
                     59: # Verify SerialTypeLen for first field of two records as we expect.
                     60: # SerialTypeLen = (len*2+12) = 60*2+12 = 132
                     61: do_test corrupt6-1.5.1 {
                     62:   hexio_read test.db 1923 2
                     63: } 8103      ;# First text field size is 81 03 == 131
                     64: do_test corrupt6-1.5.2 {
                     65:   hexio_read test.db 1987 2
                     66: } 8103      ;# Second text field size is 81 03 == 131
                     67: 
                     68: # Verify simple query results as expected.
                     69: do_test corrupt6-1.6 {
                     70:   db close
                     71:   sqlite3 db test.db
                     72:   catchsql {
                     73:     SELECT substr(x,1,8) FROM t1
                     74:   }
                     75: } [list 0 {varint32 varint32} ]
                     76: integrity_check corrupt6-1.7
                     77: 
                     78: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                     79: # corruption is detected.
                     80: # Increase SerialTypeLen by 2.
                     81: do_test corrupt6-1.8.1 {
                     82:   db close
                     83:   hexio_write test.db 1923 8105
                     84:   sqlite3 db test.db
                     85:   catchsql {
                     86:     SELECT substr(x,1,8) FROM t1
                     87:   }
                     88: } [list 1 {database disk image is malformed}]
                     89: 
                     90: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                     91: # corruption is detected.
                     92: # Decrease SerialTypeLen by 2.
                     93: do_test corrupt6-1.8.2 {
                     94:   db close
                     95:   hexio_write test.db 1923 8101
                     96:   sqlite3 db test.db
                     97:   catchsql {
                     98:     SELECT substr(x,1,8) FROM t1
                     99:   }
                    100: } [list 1 {database disk image is malformed}]
                    101: 
                    102: # Put value of record 1 / field 1 SerialTypeLen back.
                    103: do_test corrupt6-1.8.3 {
                    104:   db close
                    105:   hexio_write test.db 1923 8103
                    106:   sqlite3 db test.db
                    107:   catchsql {
                    108:     SELECT substr(x,1,8) FROM t1
                    109:   }
                    110: } [list 0 {varint32 varint32} ]
                    111: integrity_check corrupt6-1.8.4
                    112: 
                    113: # Adjust value of record 2 / field 1 SerialTypeLen and see if the
                    114: # corruption is detected.
                    115: # Increase SerialTypeLen by 2.
                    116: do_test corrupt6-1.9.1 {
                    117:   db close
                    118:   hexio_write test.db 1987 8105
                    119:   sqlite3 db test.db
                    120:   catchsql {
                    121:     SELECT substr(x,1,8) FROM t1
                    122:   }
                    123: } [list 1 {database disk image is malformed}]
                    124: 
                    125: # Adjust value of record 2 / field 2 SerialTypeLen and see if the
                    126: # corruption is detected.
                    127: # Decrease SerialTypeLen by 2.
                    128: do_test corrupt6-1.9.2 {
                    129:   db close
                    130:   hexio_write test.db 1987 8101
                    131:   sqlite3 db test.db
                    132:   catchsql {
                    133:     SELECT substr(x,1,8) FROM t1
                    134:   }
                    135: } [list 1 {database disk image is malformed}]
                    136: 
                    137: # Put value of record 1 / field 2 SerialTypeLen back.
                    138: do_test corrupt6-1.9.3 {
                    139:   db close
                    140:   hexio_write test.db 1987 8103
                    141:   sqlite3 db test.db
                    142:   catchsql {
                    143:     SELECT substr(x,1,8) FROM t1
                    144:   }
                    145: } [list 0 {varint32 varint32} ]
                    146: integrity_check corrupt6-1.9.4
                    147: 
                    148: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    149: # corruption is detected.
                    150: # Set SerialTypeLen to FF 7F (2 bytes)
                    151: do_test corrupt6-1.10.1 {
                    152:   db close
                    153:   hexio_write test.db 1923 FF7F
                    154:   sqlite3 db test.db
                    155:   catchsql {
                    156:     SELECT substr(x,1,8) FROM t1
                    157:   }
                    158: } [list 1 {database disk image is malformed}]
                    159: 
                    160: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    161: # corruption is detected.
                    162: # Set SerialTypeLen to FF FF 7F (3 bytes)
                    163: do_test corrupt6-1.10.2 {
                    164:   db close
                    165:   hexio_write test.db 1923 FFFF7F
                    166:   sqlite3 db test.db
                    167:   catchsql {
                    168:     SELECT substr(x,1,8) FROM t1
                    169:   }
                    170: } [list 1 {database disk image is malformed}]
                    171: 
                    172: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    173: # corruption is detected.
                    174: # Set SerialTypeLen to FF FF FF 7F (4 bytes)
                    175: do_test corrupt6-1.10.3 {
                    176:   db close
                    177:   hexio_write test.db 1923 FFFFFF7F
                    178:   sqlite3 db test.db
                    179:   catchsql {
                    180:     SELECT substr(x,1,8) FROM t1
                    181:   }
                    182: } [list 1 {database disk image is malformed}]
                    183: 
                    184: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    185: # corruption is detected.
                    186: # Set SerialTypeLen to FF FF FF FF 7F (5 bytes)
                    187: do_test corrupt6-1.10.4 {
                    188:   db close
                    189:   hexio_write test.db 1923 FFFFFFFF7F
                    190:   sqlite3 db test.db
                    191:   catchsql {
                    192:     SELECT substr(x,1,8) FROM t1
                    193:   }
                    194: } [list 1 {database disk image is malformed}]
                    195: 
                    196: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    197: # corruption is detected.
                    198: # Set SerialTypeLen to FF FF FF FF FF 7F (6 bytes, and overflows).
                    199: do_test corrupt6-1.10.5 {
                    200:   db close
                    201:   hexio_write test.db 1923 FFFFFFFFFF7F
                    202:   sqlite3 db test.db
                    203:   catchsql {
                    204:     SELECT substr(x,1,8) FROM t1
                    205:   }
                    206: } [list 1 {database disk image is malformed}]
                    207: 
                    208: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    209: # corruption is detected.
                    210: # Set SerialTypeLen to FF FF FF FF FF FF 7F (7 bytes, and overflows).
                    211: do_test corrupt6-1.10.6 {
                    212:   db close
                    213:   hexio_write test.db 1923 FFFFFFFFFFFF7F
                    214:   sqlite3 db test.db
                    215:   catchsql {
                    216:     SELECT substr(x,1,8) FROM t1
                    217:   }
                    218: } [list 1 {database disk image is malformed}]
                    219: 
                    220: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    221: # corruption is detected.
                    222: # Set SerialTypeLen to FF FF FF FF FF FF FF 7F (8 bytes, and overflows).
                    223: do_test corrupt6-1.10.7 {
                    224:   db close
                    225:   hexio_write test.db 1923 FFFFFFFFFFFFFF7F
                    226:   sqlite3 db test.db
                    227:   catchsql {
                    228:     SELECT substr(x,1,8) FROM t1
                    229:   }
                    230: } [list 1 {database disk image is malformed}]
                    231: 
                    232: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    233: # corruption is detected.
                    234: # Set SerialTypeLen to FF FF FF FF FF FF FF FF 7F (9 bytes, and overflows).
                    235: do_test corrupt6-1.10.8 {
                    236:   db close
                    237:   hexio_write test.db 1923 FFFFFFFFFFFFFFFF7F
                    238:   sqlite3 db test.db
                    239:   catchsql {
                    240:     SELECT substr(x,1,8) FROM t1
                    241:   }
                    242: } [list 1 {database disk image is malformed}]
                    243: 
                    244: # Adjust value of record 1 / field 1 SerialTypeLen and see if the
                    245: # corruption is detected.
                    246: # Set SerialTypeLen to FFFF FF FF FF FF FF FF FF 7F (10 bytes, and overflows).
                    247: do_test corrupt6-1.10.9 {
                    248:   db close
                    249:   hexio_write test.db 1923 FFFFFFFFFFFFFFFFFF7F
                    250:   sqlite3 db test.db
                    251:   catchsql {
                    252:     SELECT substr(x,1,8) FROM t1
                    253:   }
                    254: } [list 1 {database disk image is malformed}]
                    255: 
                    256: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>