From e969d86f4cbdad1d9aa3a7fc7797fc403f922f7c Mon Sep 17 00:00:00 2001 From: "D. Richard Hipp" Date: Thu, 3 May 2018 16:56:06 +0000 Subject: [PATCH] Fix various error handling conditions on the cell overwrite optimization. Fix a test case so that it works with the new optimization. --- src/btree.c | 21 ++++++++++++--------- test/pager1.test | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/btree.c b/src/btree.c index 3811c59de7..9dc91fe982 100644 --- a/src/btree.c +++ b/src/btree.c @@ -8176,7 +8176,9 @@ static int btreeOverwriteContent( if( nDatapData) + iOffset, iAmt)!=0 ){ @@ -8219,18 +8221,19 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ rc = btreeGetPage(pBt, ovflPgno, &pPage, 0); if( rc ) return rc; if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 ){ - return SQLITE_CORRUPT_BKPT; - } - if( iOffset+ovflPageSizeaData); + rc = SQLITE_CORRUPT_BKPT; }else{ - ovflPageSize = nTotal - iOffset; + if( iOffset+ovflPageSizeaData); + }else{ + ovflPageSize = nTotal - iOffset; + } + rc = btreeOverwriteContent(pPage, pPage->aData+4, pX, + iOffset, ovflPageSize); } - rc = btreeOverwriteContent(pPage, pPage->aData+4, pX, - iOffset, ovflPageSize); + sqlite3PagerUnref(pPage->pDbPage); if( rc ) return rc; iOffset += ovflPageSize; - sqlite3PagerUnref(pPage->pDbPage); }while( iOffset 15000 } {1} -- 2.11.4.GIT