aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/prepare.c14
-rw-r--r--src/util.c4
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;
}