Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the VACUUM command, defer setting writable_schema until after it has been determined that the schema is not corrupt. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | robust-against-damaged-db |
Files: | files | file ages | folders |
SHA3-256: |
3afec260142f939c4ee1f3930769ddf3 |
User & Date: | drh 2018-10-30 00:06:27.301 |
Context
2018-10-30
| ||
00:06 | Improvements to the -fsanitize=fuzzer based database file fuzzer. (Closed-Leaf check-in: 585c94db09 user: drh tags: robust-against-damaged-db) | |
00:06 | In the VACUUM command, defer setting writable_schema until after it has been determined that the schema is not corrupt. (check-in: 3afec26014 user: drh tags: robust-against-damaged-db) | |
2018-10-29
| ||
21:01 | Fix a potential assertion fault that can occur while trying to DROP a table from a corrupted database file. (check-in: 147a9429a5 user: drh tags: trunk) | |
Changes
Changes to src/vacuum.c.
︙ | ︙ | |||
160 161 162 163 164 165 166 | ** restored before returning. Then set the writable-schema flag, and ** disable CHECK and foreign key constraints. */ saved_flags = db->flags; saved_mDbFlags = db->mDbFlags; saved_nChange = db->nChange; saved_nTotalChange = db->nTotalChange; saved_mTrace = db->mTrace; | | | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | ** restored before returning. Then set the writable-schema flag, and ** disable CHECK and foreign key constraints. */ saved_flags = db->flags; saved_mDbFlags = db->mDbFlags; saved_nChange = db->nChange; saved_nTotalChange = db->nTotalChange; saved_mTrace = db->mTrace; db->flags |= SQLITE_IgnoreChecks; db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum; db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_CountRows); db->mTrace = 0; zDbMain = db->aDb[iDb].zDbSName; pMain = db->aDb[iDb].pBt; isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain)); |
︙ | ︙ | |||
281 282 283 284 285 286 287 288 289 290 291 292 293 294 | if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Copy the triggers, views, and virtual tables from the main database ** over to the temporary database. None of these objects has any ** associated storage, so all we have to do is copy their entries ** from the SQLITE_MASTER table. */ rc = execSqlF(db, pzErrMsg, "INSERT INTO vacuum_db.sqlite_master" " SELECT*FROM \"%w\".sqlite_master" " WHERE type IN('view','trigger')" " OR(type='table'AND rootpage=0)", zDbMain ); | > | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | if( rc!=SQLITE_OK ) goto end_of_vacuum; /* Copy the triggers, views, and virtual tables from the main database ** over to the temporary database. None of these objects has any ** associated storage, so all we have to do is copy their entries ** from the SQLITE_MASTER table. */ db->flags |= SQLITE_WriteSchema; rc = execSqlF(db, pzErrMsg, "INSERT INTO vacuum_db.sqlite_master" " SELECT*FROM \"%w\".sqlite_master" " WHERE type IN('view','trigger')" " OR(type='table'AND rootpage=0)", zDbMain ); |
︙ | ︙ |