aboutsummaryrefslogtreecommitdiff
path: root/src/dbpage.c
diff options
context:
space:
mode:
authordrh <>2022-10-31 18:01:05 +0000
committerdrh <>2022-10-31 18:01:05 +0000
commitc7dd9b60eb95ebd65e53ed238e77ecfe6247b3b0 (patch)
treeed85cf9c982ccdbc9f9eca28a513b01222dd0a80 /src/dbpage.c
parent02d15a7ebd73a26e7d2b87f2a6c978170778ffcc (diff)
downloadsqlite-c7dd9b60eb95ebd65e53ed238e77ecfe6247b3b0.tar.gz
sqlite-c7dd9b60eb95ebd65e53ed238e77ecfe6247b3b0.zip
Make the UPDATE method of the sqlite_dbpage virtual table rebust against
OOM errors. [forum:/forumpost/bbcf0dd6ca|Forum post bbcf0dd6ca]. Test case in TH3. FossilOrigin-Name: d15c9a4a323b825eb80e706e12e9df95e5db458024f51e6e537940efc8234d8b
Diffstat (limited to 'src/dbpage.c')
-rw-r--r--src/dbpage.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/dbpage.c b/src/dbpage.c
index e13740d81..458f2bd50 100644
--- a/src/dbpage.c
+++ b/src/dbpage.c
@@ -354,11 +354,12 @@ static int dbpageUpdate(
pPager = sqlite3BtreePager(pBt);
rc = sqlite3PagerGet(pPager, pgno, (DbPage**)&pDbPage, 0);
if( rc==SQLITE_OK ){
- rc = sqlite3PagerWrite(pDbPage);
- if( rc==SQLITE_OK ){
- memcpy(sqlite3PagerGetData(pDbPage),
- sqlite3_value_blob(argv[3]),
- szPage);
+ const void *pData = sqlite3_value_blob(argv[3]);
+ assert( pData!=0 || pTab->db->mallocFailed );
+ if( pData
+ && (rc = sqlite3PagerWrite(pDbPage))==SQLITE_OK
+ ){
+ memcpy(sqlite3PagerGetData(pDbPage), pData, szPage);
}
}
sqlite3PagerUnref(pDbPage);