diff options
author | drh <> | 2021-10-23 17:46:00 +0000 |
---|---|---|
committer | drh <> | 2021-10-23 17:46:00 +0000 |
commit | 88944e6f1035d98e8af36c57c9d29636d2d77ec9 (patch) | |
tree | 4a2702ce8139504427a0b14034bf7239f06e857d /src/memdb.c | |
parent | be5365617143b4bb58ab8a105df1a5ba041b0bb6 (diff) | |
download | sqlite-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.c | 13 |
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; |