f2d6883ed2
Resolves: #1558809
52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
Index: src/build.c
|
|
==================================================================
|
|
--- src/build.c
|
|
+++ src/build.c
|
|
@@ -1868,12 +1868,10 @@
|
|
}
|
|
assert( !db->mallocFailed );
|
|
p = pParse->pNewTable;
|
|
if( p==0 ) return;
|
|
|
|
- assert( !db->init.busy || !pSelect );
|
|
-
|
|
/* If the db->init.busy is 1 it means we are reading the SQL off the
|
|
** "sqlite_master" or "sqlite_temp_master" table on the disk.
|
|
** So do not write to the disk again. Extract the root page number
|
|
** for the table from the db->init.newTnum field. (The page number
|
|
** should have been put there by the sqliteOpenCb routine.)
|
|
@@ -1880,10 +1878,14 @@
|
|
**
|
|
** If the root page number is 1, that means this is the sqlite_master
|
|
** table itself. So mark it read-only.
|
|
*/
|
|
if( db->init.busy ){
|
|
+ if( pSelect ){
|
|
+ sqlite3ErrorMsg(pParse, "");
|
|
+ return;
|
|
+ }
|
|
p->tnum = db->init.newTnum;
|
|
if( p->tnum==1 ) p->tabFlags |= TF_Readonly;
|
|
}
|
|
|
|
/* Special processing for WITHOUT ROWID Tables */
|
|
|
|
Index: src/prepare.c
|
|
==================================================================
|
|
--- src/prepare.c
|
|
+++ src/prepare.c
|
|
@@ -27,11 +27,11 @@
|
|
sqlite3 *db = pData->db;
|
|
if( !db->mallocFailed && (db->flags & SQLITE_WriteSchema)==0 ){
|
|
char *z;
|
|
if( zObj==0 ) zObj = "?";
|
|
z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj);
|
|
- if( zExtra ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
|
|
+ if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra);
|
|
sqlite3DbFree(db, *pData->pzErrMsg);
|
|
*pData->pzErrMsg = z;
|
|
}
|
|
pData->rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_CORRUPT_BKPT;
|
|
}
|
|
|