aboutsummaryrefslogtreecommitdiff
path: root/src/memdb.c
diff options
context:
space:
mode:
authordrh <>2021-10-23 17:46:00 +0000
committerdrh <>2021-10-23 17:46:00 +0000
commit88944e6f1035d98e8af36c57c9d29636d2d77ec9 (patch)
tree4a2702ce8139504427a0b14034bf7239f06e857d /src/memdb.c
parentbe5365617143b4bb58ab8a105df1a5ba041b0bb6 (diff)
downloadsqlite-88944e6f1035d98e8af36c57c9d29636d2d77ec9.tar.gz
sqlite-88944e6f1035d98e8af36c57c9d29636d2d77ec9.zip
Fix the memdb VFS so that it does not allow mmap if it is resizable, and so
that it never opens a disk file for any reason. FossilOrigin-Name: 5ee14715a561d7522e9c6fd35a2ad3e6de526450025a99d2a523c2b27151be4f
Diffstat (limited to 'src/memdb.c')
-rw-r--r--src/memdb.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/memdb.c b/src/memdb.c
index 0d970b6ca..321ef6ff7 100644
--- a/src/memdb.c
+++ b/src/memdb.c
@@ -272,7 +272,7 @@ static int memdbRead(
*/
static int memdbEnlarge(MemStore *p, sqlite3_int64 newSz){
unsigned char *pNew;
- if( (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)==0 || p->nMmap>0 ){
+ if( (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)==0 || NEVER(p->nMmap>0) ){
return SQLITE_FULL;
}
if( newSz>p->szMax ){
@@ -471,7 +471,7 @@ static int memdbFetch(
){
MemStore *p = ((MemFile*)pFile)->pStore;
memdbEnter(p);
- if( iOfst+iAmt>p->sz ){
+ if( iOfst+iAmt>p->sz || (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)!=0 ){
*pp = 0;
}else{
p->nMmap++;
@@ -505,9 +505,7 @@ static int memdbOpen(
MemFile *pFile = (MemFile*)pFd;
MemStore *p = 0;
int szName;
- if( (flags & SQLITE_OPEN_MAIN_DB)==0 ){
- return ORIGVFS(pVfs)->xOpen(ORIGVFS(pVfs), zName, pFd, flags, pOutFlags);
- }
+
memset(pFile, 0, sizeof(*pFile));
szName = sqlite3Strlen30(zName);
if( szName>1 && zName[0]=='/' ){
@@ -567,8 +565,9 @@ static int memdbOpen(
p->szMax = sqlite3GlobalConfig.mxMemdbSize;
}
pFile->pStore = p;
- assert( pOutFlags!=0 ); /* True because flags==SQLITE_OPEN_MAIN_DB */
- *pOutFlags = flags | SQLITE_OPEN_MEMORY;
+ if( pOutFlags!=0 ){
+ *pOutFlags = flags | SQLITE_OPEN_MEMORY;
+ }
pFd->pMethods = &memdb_io_methods;
memdbLeave(p);
return SQLITE_OK;