diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/prepare.c | 14 | ||||
-rw-r--r-- | src/util.c | 4 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/prepare.c b/src/prepare.c index 84f2ee8a2..0be11a226 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -115,10 +115,10 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ assert( db->init.busy ); db->init.iDb = iDb; - sqlite3GetUInt32(argv[3], &db->init.newTnum); - if( db->init.newTnum>pData->mxPage && pData->mxPage!=0 ){ + if( sqlite3GetUInt32(argv[3], &db->init.newTnum)==0 + || (db->init.newTnum>pData->mxPage && pData->mxPage>0) + ){ corruptSchema(pData, argv[1], "invalid rootpage"); - return 0; } db->init.orphanTrigger = 0; db->init.azInit = argv; @@ -152,13 +152,15 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ */ Index *pIndex; pIndex = sqlite3FindIndex(db, argv[1], db->aDb[iDb].zDbSName); - if( pIndex==0 - || sqlite3GetUInt32(argv[3],&pIndex->tnum)==0 + if( pIndex==0 ){ + corruptSchema(pData, argv[1], "orphan index"); + }else + if( sqlite3GetUInt32(argv[3],&pIndex->tnum)==0 || pIndex->tnum<2 || (pIndex->tnum>pData->mxPage && pData->mxPage!=0) || sqlite3IndexHasDuplicateRootPage(pIndex) ){ - corruptSchema(pData, argv[1], pIndex?"invalid rootpage":"orphan index"); + corruptSchema(pData, argv[1], "invalid roopage"); } } return 0; diff --git a/src/util.c b/src/util.c index 58d1cdd5c..64ab4e95d 100644 --- a/src/util.c +++ b/src/util.c @@ -874,9 +874,9 @@ int sqlite3GetUInt32(const char *z, u32 *pI){ int i; for(i=0; sqlite3Isdigit(z[i]); i++){ v = v*10 + z[i] - '0'; - if( v>4294967296LL ) return 0; + if( v>4294967296LL ){ *pI = 0; return 0; } } - if( i==0 || z[i]!=0 ) return 0; + if( i==0 || z[i]!=0 ){ *pI = 0; return 0; } *pI = (u32)v; return 1; } |