gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/fts3corrupt3.test (about)

     1  # 2010 October 27
     2  #
     3  #    May you do good and not evil.
     4  #    May you find forgiveness for yourself and forgive others.
     5  #    May you share freely, never taking more than you give.
     6  #
     7  #***********************************************************************
     8  # Test that the FTS3 extension does not crash when it encounters a
     9  # corrupt data structure on disk.
    10  #
    11  
    12  
    13  set testdir [file dirname $argv0]
    14  source $testdir/tester.tcl
    15  
    16  # If SQLITE_ENABLE_FTS3 is not defined, omit this file.
    17  ifcapable !fts3 { finish_test ; return }
    18  
    19  set ::testprefix fts3corrupt3
    20  
    21  #-------------------------------------------------------------------------
    22  # Test that fts3 does not choke on an oversized varint.
    23  #
    24  do_execsql_test 1.0 {
    25    PRAGMA page_size = 512;
    26    CREATE VIRTUAL TABLE t1 USING fts3;
    27    BEGIN;
    28      INSERT INTO t1 VALUES('one');
    29      INSERT INTO t1 VALUES('one');
    30      INSERT INTO t1 VALUES('one');
    31    COMMIT;
    32  }
    33  do_execsql_test 1.1 {
    34    SELECT quote(root) from t1_segdir;
    35  } {X'00036F6E6509010200010200010200'}
    36  sqlite3_db_config db DEFENSIVE 0
    37  do_execsql_test 1.2 {
    38    UPDATE t1_segdir SET root = X'00036F6E650EFFFFFFFFFFFFFFFFFFFFFFFF0200';
    39  }
    40  do_catchsql_test 1.3 {
    41    SELECT rowid FROM t1 WHERE t1 MATCH 'one'
    42  } {0 -1}
    43  
    44  #-------------------------------------------------------------------------
    45  # Interior node with the prefix or suffix count of an entry set to a
    46  # negative value.
    47  #
    48  set doc1 [string repeat "x " 600]
    49  set doc2 [string repeat "y " 600]
    50  set doc3 [string repeat "z " 600]
    51  
    52  do_execsql_test 2.0 {
    53    CREATE VIRTUAL TABLE t2 USING fts3;
    54    BEGIN;
    55      INSERT INTO t2 VALUES($doc1);
    56      INSERT INTO t2 VALUES($doc2);
    57      INSERT INTO t2 VALUES($doc3);
    58    COMMIT;
    59  }
    60  do_execsql_test 2.1 {
    61    SELECT quote(root) from t2_segdir;
    62  } {X'0101017900017A'}
    63  
    64  
    65  
    66  finish_test