diff options
author | drh <> | 2022-10-31 18:01:05 +0000 |
---|---|---|
committer | drh <> | 2022-10-31 18:01:05 +0000 |
commit | c7dd9b60eb95ebd65e53ed238e77ecfe6247b3b0 (patch) | |
tree | ed85cf9c982ccdbc9f9eca28a513b01222dd0a80 /src/dbpage.c | |
parent | 02d15a7ebd73a26e7d2b87f2a6c978170778ffcc (diff) | |
download | sqlite-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.c | 11 |
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); |