-C Fix\ssome\sminor\sformatting\sand\scode\sorganization\sissues.
-D 2014-10-24T16:40:49.448
+C Fix\ssome\sissues\sin\sthe\snew\scode\son\sthis\sbranch\srelated\sto\sthe\shandling\sof\scorrupt\sdatabases.
+D 2014-10-24T18:43:57.313
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/backup.c a31809c65623cc41849b94d368917f8bb66e6a7e
F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
F src/btmutex.c 49ca66250c7dfa844a4d4cb8272b87420d27d3a5
-F src/btree.c 56381ce7614853ec0e32bb187e85db4da774c7c5
+F src/btree.c df15daf116e9ef1a7ff88257f6fb678ba385b5ea
F src/btree.h a79aa6a71e7f1055f01052b7f821bd1c2dce95c8
F src/btreeInt.h 026d0129724e8f265fdc60d44ec240cf5a4e6179
F src/build.c 9dc2bd94347b878c89627000c92b0c8d97ec2919
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 854a54c6c21e800b0cd999023014813f7c50b23f
-R b3aec92126a25950ff876c6cdf2fb4df
+P eab8706dc47aa0a44caf73619de858397c3e0b4e
+R 8a34c36d0ed8bbbc0bb7360d0dc30d47
U dan
-Z 9e7a15bc5953228881d999c99d9f0682
+Z 610a2814ec6cdf214c41e43dd2355678
assert( pPage->pBt!=0 );
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize );
- assert( iEnd <= pPage->pBt->usableSize );
+ assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
assert( iSize>=4 ); /* Minimum cell size is 4 */
assert( iStart<=iLast );
u8 *aData = pPg->aData;
u8 *pData = *ppData;
const int bFreelist = aData[1] || aData[2];
- assert( pPg->hdrOffset==0 ); /* Never called on page 1 */
+ assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */
for(i=0; i<nCell; i++){
int sz = szCell[i];
u8 *pSlot;
put2byte(&aData[hdr+5], pData - aData);
#ifdef SQLITE_DEBUG
- for(i=0; i<nNew; i++){
+ for(i=0; i<nNew && !CORRUPT_DB; i++){
u8 *pCell = apCell[i+iNew];
int iOff = get2byte(&pPg->aCellIdx[i*2]);
if( pCell>=aData && pCell<&aData[pPg->pBt->usableSize] ){
flags = aPgFlags[j];
}
}
- if( apNew[i]->pgno!=iMin ){
+ if( iMin==0 ){
+ /* This case can only occur if aPgno[] contains duplicate page
+ ** numbers. Which can only happen if the database is corrupt. */
+ assert( CORRUPT_DB );
+ rc = SQLITE_CORRUPT_BKPT;
+ goto balance_cleanup;
+ }else if( apNew[i]->pgno!=iMin ){
sqlite3PagerRekey(apNew[i]->pDbPage, iMin, flags);
apNew[i]->pgno = iMin;
}