SQLite

Check-in [916c52dad4]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Change the error message slightly for when two or more indexes have the same rootpage.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 916c52dad414b224695d455a42af36f85dff216504c2aa67d1d2c5818cdca8d6
User & Date: drh 2019-01-30 19:50:07.547
Context
2019-01-31
01:39
Improvements to "PRAGMA parser_trace=ON": Make it a flag pragma, and then use the flag to show the complete SQL text at the beginning of the parse. (check-in: 507c43537f user: drh tags: trunk)
2019-01-30
19:50
Change the error message slightly for when two or more indexes have the same rootpage. (check-in: 916c52dad4 user: drh tags: trunk)
19:12
When parsing the schema, check for duplicate index root page numbers before adding the index to the schema hash table. (check-in: 6b360bc0b9 user: dan tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/build.c.
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
    if( db->init.busy ){
      Index *p;
      assert( !IN_SPECIAL_PARSE );
      assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
      if( pTblName!=0 ){
        pIndex->tnum = db->init.newTnum;
        if( sqlite3IndexHasDuplicateRootPage(pIndex) ){
          sqlite3ErrorMsg(pParse, "invalid root page");
          pParse->rc = SQLITE_CORRUPT_BKPT;
          goto exit_create_index;
        }
      }
      p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
          pIndex->zName, pIndex);
      if( p ){







|







3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
    if( db->init.busy ){
      Index *p;
      assert( !IN_SPECIAL_PARSE );
      assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
      if( pTblName!=0 ){
        pIndex->tnum = db->init.newTnum;
        if( sqlite3IndexHasDuplicateRootPage(pIndex) ){
          sqlite3ErrorMsg(pParse, "invalid rootpage");
          pParse->rc = SQLITE_CORRUPT_BKPT;
          goto exit_create_index;
        }
      }
      p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
          pIndex->zName, pIndex);
      if( p ){
Changes to test/corruptL.test.
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
}]} {}

do_catchsql_test 6.1 {
  BEGIN;
    INSERT INTO t1(b) VALUES(1);
    INSERT INTO t1(b) VALUES(2);
  COMMIT;
} {1 {malformed database schema (t1b) - invalid root page}}

#-------------------------------------------------------------------------
reset_db
do_test 7.0 {
  sqlite3 db {}
  db deserialize [decode_hexdb {
| size 20480 pagesize 4096 filename crash-8391315d75edff.db







|







623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
}]} {}

do_catchsql_test 6.1 {
  BEGIN;
    INSERT INTO t1(b) VALUES(1);
    INSERT INTO t1(b) VALUES(2);
  COMMIT;
} {1 {malformed database schema (t1b) - invalid rootpage}}

#-------------------------------------------------------------------------
reset_db
do_test 7.0 {
  sqlite3 db {}
  db deserialize [decode_hexdb {
| size 20480 pagesize 4096 filename crash-8391315d75edff.db
716
717
718
719
720
721
722
723
724
725
| page 5 offset 16384
|      0: 0d 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00   ................
| end crash-8391315d75edff.db
}]} {}

do_catchsql_test 7.1 {
  SELECT * FROM sqlite_master;
} {1 {malformed database schema (t1x1) - invalid root page}}

finish_test







|


716
717
718
719
720
721
722
723
724
725
| page 5 offset 16384
|      0: 0d 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00   ................
| end crash-8391315d75edff.db
}]} {}

do_catchsql_test 7.1 {
  SELECT * FROM sqlite_master;
} {1 {malformed database schema (t1x1) - invalid rootpage}}

finish_test
Changes to test/fuzzdata8.db.

cannot compute difference between binary files