From aa7af1acbca960adf7b5a9aa21868b2ffef7f29c Mon Sep 17 00:00:00 2001 From: bjd Date: Fri, 25 Apr 2025 20:43:17 +0800 Subject: [PATCH 01/16] rekey support multiple process Signed-off-by: bjd --- .../0007-rekey-support-multiple-process.patch | 116 ++++++++++++++++++ ...on.patch => 0008-BugFix-CurrVersion.patch} | 0 2 files changed, 116 insertions(+) create mode 100644 patch/0007-rekey-support-multiple-process.patch rename patch/{0007-BugFix-CurrVersion.patch => 0008-BugFix-CurrVersion.patch} (100%) diff --git a/patch/0007-rekey-support-multiple-process.patch b/patch/0007-rekey-support-multiple-process.patch new file mode 100644 index 0000000..9df405f --- /dev/null +++ b/patch/0007-rekey-support-multiple-process.patch @@ -0,0 +1,116 @@ +From 2ec79c4228c372cd77e24032c0156de72634badc Mon Sep 17 00:00:00 2001 +From: ht +Date: Wed, 23 Apr 2025 16:26:48 +0800 +Subject: [PATCH] rekey support multiple process + +Signed-off-by: ht +Change-Id: I38686a4d05109a7b2a707c6abed54f784542f9da +--- + src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 47 insertions(+), 17 deletions(-) + +diff --git a/src/sqlite3.c b/src/sqlite3.c +index 1063591..ac41310 100644 +--- a/src/sqlite3.c ++++ b/src/sqlite3.c +@@ -245762,7 +245762,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ + } + + sqlite3_mutex_leave(db->mutex); +- ++ rc = sqlite3BtreeBeginTrans(p, 0, 0); ++ if( rc!=SQLITE_OK ){ ++ sqlite3_log(SQLITE_WARNING, "sqlite3CodecAttach: error when begin trans. errno = %d", rc); ++ return rc; ++ } ++ sqlite3BtreeCommit(p); + return SQLITE_OK; + } + +@@ -245804,6 +245809,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ + return sqlite3_rekey_v2(db, "main", pKey, nKey); + } + ++static inline u8 IsConnectionValidForCheck(Pager *pPager) ++{ ++#if SQLITE_OS_UNIX ++ unixFile *fd = (unixFile *)pPager->fd; ++ // unix and only one connection exist ++ if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || ++ sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { ++ return 0; ++ } ++ return 1; ++#else ++ return 0; ++#endif ++} ++ + int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ + if(db == NULL || pKey == NULL || nKey == 0){ + return SQLITE_ERROR; +@@ -245828,7 +245848,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ + return rc; + } + sqlite3_mutex_enter(db->mutex); +- (void)sqlite3BtreeBeginTrans(p, 1, 0); ++ rc = sqlite3BtreeBeginTrans(p, 1, 0); ++ if(rc != SQLITE_OK){ ++ sqlite3_mutex_leave(db->mutex); ++ sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when begin trans. errno = %d.", rc); ++ return rc; ++ } ++#ifndef SQLITE_OMIT_WAL ++ if(pPager->pWal != NULL){ ++ rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); ++ if(rc != SQLITE_OK || !IsConnectionValidForCheck(pPager)){ ++ sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when lock. errno = %d.", rc); ++ if(rc == SQLITE_OK){ ++ unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); ++ rc = SQLITE_BUSY; ++ } ++ (void)sqlite3BtreeRollback(p, SQLITE_ABORT_ROLLBACK, 0); ++ sqlite3_mutex_leave(db->mutex); ++ return rc; ++ } ++ } ++#endif + sqlite3PagerPagecount(pPager, &pageCount); + // support hmac algo changed by using rekey operation + int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; +@@ -245852,6 +245892,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ + } + } + } ++#ifndef SQLITE_OMIT_WAL ++ if(pPager->pWal != NULL){ ++ unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); ++ } ++#endif + if(rc == SQLITE_OK){ + (void)sqlite3BtreeCommit(p); + sqlite3CodecFreeKeyContext(ctx->readCtx); +@@ -247189,21 +247234,6 @@ CHK_RESTORE_OUT: + return rc; + } + +-static inline u8 IsConnectionValidForCheck(Pager *pPager) +-{ +-#if SQLITE_OS_UNIX +- unixFile *fd = (unixFile *)pPager->fd; +- // unix and only one connection exist +- if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || +- sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { +- return 0; +- } +- return 1; +-#else +- return 0; +-#endif +-} +- + static int MetaDwrOpenAndCheck(Btree *pBt) + { + Pager *pPager = pBt->pBt->pPager; +-- +2.17.1 diff --git a/patch/0007-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch similarity index 100% rename from patch/0007-BugFix-CurrVersion.patch rename to patch/0008-BugFix-CurrVersion.patch -- Gitee From bd675963f51a75c3a668727158739fb01b8c9282 Mon Sep 17 00:00:00 2001 From: bjd Date: Fri, 25 Apr 2025 20:49:25 +0800 Subject: [PATCH 02/16] rekey support multiple process Signed-off-by: bjd --- patch/0007-rekey-support-multiple-process.patch | 1 + 1 file changed, 1 insertion(+) diff --git a/patch/0007-rekey-support-multiple-process.patch b/patch/0007-rekey-support-multiple-process.patch index 9df405f..77a8888 100644 --- a/patch/0007-rekey-support-multiple-process.patch +++ b/patch/0007-rekey-support-multiple-process.patch @@ -114,3 +114,4 @@ index 1063591..ac41310 100644 Pager *pPager = pBt->pBt->pPager; -- 2.17.1 + -- Gitee From c14be99fd226bea496beafa8adce1d123bd40284 Mon Sep 17 00:00:00 2001 From: bjd Date: Sun, 27 Apr 2025 10:46:37 +0800 Subject: [PATCH 03/16] Prohibit multi process rekey Signed-off-by: bjd --- ...ohibited-in-multi-process-scenarios.patch} | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) rename patch/{0007-rekey-support-multiple-process.patch => 0007-Rekey-is-prohibited-in-multi-process-scenarios.patch} (83%) diff --git a/patch/0007-rekey-support-multiple-process.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch similarity index 83% rename from patch/0007-rekey-support-multiple-process.patch rename to patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 77a8888..0112192 100644 --- a/patch/0007-rekey-support-multiple-process.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,19 +1,18 @@ -From 2ec79c4228c372cd77e24032c0156de72634badc Mon Sep 17 00:00:00 2001 -From: ht -Date: Wed, 23 Apr 2025 16:26:48 +0800 -Subject: [PATCH] rekey support multiple process +From 9bd46cab09112828f92e3b5f2db0e6fa97835ecb Mon Sep 17 00:00:00 2001 +From: bjd +Date: Sun, 27 Apr 2025 10:42:52 +0800 +Subject: [PATCH] Rekey is prohibited in multi-process scenarios -Signed-off-by: ht -Change-Id: I38686a4d05109a7b2a707c6abed54f784542f9da +Signed-off-by: bjd --- src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 1063591..ac41310 100644 +index 7e9dcbf..24a5e38 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c -@@ -245762,7 +245762,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ +@@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ } sqlite3_mutex_leave(db->mutex); @@ -27,7 +26,7 @@ index 1063591..ac41310 100644 return SQLITE_OK; } -@@ -245804,6 +245809,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ +@@ -259874,6 +259879,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ return sqlite3_rekey_v2(db, "main", pKey, nKey); } @@ -49,7 +48,7 @@ index 1063591..ac41310 100644 int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ if(db == NULL || pKey == NULL || nKey == 0){ return SQLITE_ERROR; -@@ -245828,7 +245848,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259898,7 +259918,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -78,7 +77,7 @@ index 1063591..ac41310 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -245852,6 +245892,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259962,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } @@ -90,7 +89,7 @@ index 1063591..ac41310 100644 if(rc == SQLITE_OK){ (void)sqlite3BtreeCommit(p); sqlite3CodecFreeKeyContext(ctx->readCtx); -@@ -247189,21 +247234,6 @@ CHK_RESTORE_OUT: +@@ -261257,21 +261302,6 @@ CHK_RESTORE_OUT: return rc; } @@ -113,5 +112,5 @@ index 1063591..ac41310 100644 { Pager *pPager = pBt->pBt->pPager; -- -2.17.1 +2.46.2.windows.1 -- Gitee From 7b69b88c06a3389a0c8b3b31b7a075e21ce5ebca Mon Sep 17 00:00:00 2001 From: bjd Date: Sun, 27 Apr 2025 11:35:38 +0800 Subject: [PATCH 04/16] Prohibit multi process rekey Signed-off-by: bjd --- patch/0008-BugFix-CurrVersion.patch | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index 36d5eac..d36bed9 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,14 +1,15 @@ -From 4cb905b575c2103caada8386cb5fe35562059d4a Mon Sep 17 00:00:00 2001 -From: ryne3366 -Date: Mon, 24 Mar 2025 20:30:45 +0800 -Subject: [PATCH] check permission for meta file +From 5fcaf19014b063b5d527c5ed0bc076e15fab6ba1 Mon Sep 17 00:00:00 2001 +From: bjd +Date: Sun, 27 Apr 2025 11:34:25 +0800 +Subject: [PATCH] BugFix CurrVersion +Signed-off-by: bjd --- src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 96 insertions(+), 24 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..d350cfc 100644 +index 24a5e38..61cc6e7 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -95,7 +96,7 @@ index 7e9dcbf..d350cfc 100644 /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260390,7 +260435,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260435,7 +260480,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -104,7 +105,7 @@ index 7e9dcbf..d350cfc 100644 parse->nErr++; parse->rc = rc; } -@@ -260842,6 +260887,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260887,6 +260932,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -134,7 +135,7 @@ index 7e9dcbf..d350cfc 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260858,15 +260926,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260903,15 +260971,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -151,7 +152,7 @@ index 7e9dcbf..d350cfc 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261425,16 +261488,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -168,7 +169,7 @@ index 7e9dcbf..d350cfc 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261451,7 +261504,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -177,7 +178,7 @@ index 7e9dcbf..d350cfc 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261490,8 +261543,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -188,7 +189,7 @@ index 7e9dcbf..d350cfc 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261511,10 +261564,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -204,7 +205,7 @@ index 7e9dcbf..d350cfc 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261583,6 +261639,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ @@ -228,5 +229,5 @@ index 7e9dcbf..d350cfc 100644 #ifdef SQLITE_EXPORT_SYMBOLS #ifndef SQLITE_CKSUMVFS_STATIC -- -2.34.1 +2.46.2.windows.1 -- Gitee From a2a27be709d935d8bae3df836853d31030a0d759 Mon Sep 17 00:00:00 2001 From: bjd Date: Sun, 27 Apr 2025 19:34:29 +0800 Subject: [PATCH 05/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BUILD.gn b/BUILD.gn index 3b03c37..287a8d7 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -231,6 +231,8 @@ if (is_mingw || is_mac) { "SQLITE_EXPORT_SYMBOLS", "SQLITE_SHARED_BLOCK_OPTIMIZATION", "OPENSSL_SUPPRESS_DEPRECATED", + "SQLITE_ENABLE_LOAD_EXTENSION", + "SQLITE_ENABLE_DROPTABLE_CALLBACK", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ -- Gitee From 0e3fadd3752cb297c926b89ba9c3dfe89189cb75 Mon Sep 17 00:00:00 2001 From: bjd Date: Sun, 27 Apr 2025 20:14:46 +0800 Subject: [PATCH 06/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 2 -- 1 file changed, 2 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 287a8d7..3b03c37 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -231,8 +231,6 @@ if (is_mingw || is_mac) { "SQLITE_EXPORT_SYMBOLS", "SQLITE_SHARED_BLOCK_OPTIMIZATION", "OPENSSL_SUPPRESS_DEPRECATED", - "SQLITE_ENABLE_LOAD_EXTENSION", - "SQLITE_ENABLE_DROPTABLE_CALLBACK", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ -- Gitee From 11a20fbac4d60b22fbe24049ce8ad662587d050f Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 10:20:34 +0800 Subject: [PATCH 07/16] Prohibit multi process rekey Signed-off-by: bjd --- ...rohibited-in-multi-process-scenarios.patch | 63 +++---------------- patch/0008-BugFix-CurrVersion.patch | 31 ++++----- 2 files changed, 25 insertions(+), 69 deletions(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 0112192..3a8bf72 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,22 +1,21 @@ -From 9bd46cab09112828f92e3b5f2db0e6fa97835ecb Mon Sep 17 00:00:00 2001 +From 9cd0695f173277474907a676b655eab05c886fcb Mon Sep 17 00:00:00 2001 From: bjd -Date: Sun, 27 Apr 2025 10:42:52 +0800 +Date: Mon, 28 Apr 2025 09:26:57 +0800 Subject: [PATCH] Rekey is prohibited in multi-process scenarios Signed-off-by: bjd --- - src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- - 1 file changed, 47 insertions(+), 17 deletions(-) + src/sqlite3.c | 33 ++++++++++++++++++++++++++++++++- + 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..24a5e38 100644 +index 7e9dcbf..e7ba851 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c -@@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ - } +@@ -259833,6 +259833,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ sqlite3_mutex_leave(db->mutex); -- + + rc = sqlite3BtreeBeginTrans(p, 0, 0); + if( rc!=SQLITE_OK ){ + sqlite3_log(SQLITE_WARNING, "sqlite3CodecAttach: error when begin trans. errno = %d", rc); @@ -26,29 +25,7 @@ index 7e9dcbf..24a5e38 100644 return SQLITE_OK; } -@@ -259874,6 +259879,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ - return sqlite3_rekey_v2(db, "main", pKey, nKey); - } - -+static inline u8 IsConnectionValidForCheck(Pager *pPager) -+{ -+#if SQLITE_OS_UNIX -+ unixFile *fd = (unixFile *)pPager->fd; -+ // unix and only one connection exist -+ if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || -+ sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { -+ return 0; -+ } -+ return 1; -+#else -+ return 0; -+#endif -+} -+ - int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ - if(db == NULL || pKey == NULL || nKey == 0){ - return SQLITE_ERROR; -@@ -259898,7 +259918,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259898,7 +259904,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -77,7 +54,7 @@ index 7e9dcbf..24a5e38 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -259922,6 +259962,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259948,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } @@ -89,28 +66,6 @@ index 7e9dcbf..24a5e38 100644 if(rc == SQLITE_OK){ (void)sqlite3BtreeCommit(p); sqlite3CodecFreeKeyContext(ctx->readCtx); -@@ -261257,21 +261302,6 @@ CHK_RESTORE_OUT: - return rc; - } - --static inline u8 IsConnectionValidForCheck(Pager *pPager) --{ --#if SQLITE_OS_UNIX -- unixFile *fd = (unixFile *)pPager->fd; -- // unix and only one connection exist -- if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || -- sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { -- return 0; -- } -- return 1; --#else -- return 0; --#endif --} -- - static int MetaDwrOpenAndCheck(Btree *pBt) - { - Pager *pPager = pBt->pBt->pPager; -- 2.46.2.windows.1 diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index d36bed9..7c57ad3 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,15 +1,15 @@ -From 5fcaf19014b063b5d527c5ed0bc076e15fab6ba1 Mon Sep 17 00:00:00 2001 +From 954714d6229b8f4541781af002ffe702c6f925cd Mon Sep 17 00:00:00 2001 From: bjd -Date: Sun, 27 Apr 2025 11:34:25 +0800 -Subject: [PATCH] BugFix CurrVersion +Date: Mon, 28 Apr 2025 10:17:12 +0800 +Subject: [PATCH] 08 Signed-off-by: bjd --- - src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 96 insertions(+), 24 deletions(-) + src/sqlite3.c | 121 ++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 97 insertions(+), 24 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 24a5e38..61cc6e7 100644 +index e7ba851..33bc3ca 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -83,7 +83,7 @@ index 24a5e38..61cc6e7 100644 /* ** Implementation of offsets() function. */ -@@ -205787,6 +205826,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( +@@ -205787,6 +205826,13 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( sCtx.iDocid = pCsr->iPrevId; sCtx.pCsr = pCsr; @@ -92,11 +92,12 @@ index 24a5e38..61cc6e7 100644 + ** have been saved. */ + rc = sqlite3Fts3ExprIterate(pCsr->pExpr, fts3ExprRestartIfCb, (void*)&sCtx); + if( rc!=SQLITE_OK ) goto offsets_out; ++ + /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260435,7 +260480,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260421,7 +260467,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -105,7 +106,7 @@ index 24a5e38..61cc6e7 100644 parse->nErr++; parse->rc = rc; } -@@ -260887,6 +260932,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260873,6 +260919,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -135,7 +136,7 @@ index 24a5e38..61cc6e7 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260903,15 +260971,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260889,15 +260958,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -152,7 +153,7 @@ index 24a5e38..61cc6e7 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261456,16 +261520,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -169,7 +170,7 @@ index 24a5e38..61cc6e7 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261482,7 +261536,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -178,7 +179,7 @@ index 24a5e38..61cc6e7 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261521,8 +261575,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -189,7 +190,7 @@ index 24a5e38..61cc6e7 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261542,10 +261596,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -205,7 +206,7 @@ index 24a5e38..61cc6e7 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261614,6 +261671,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ -- Gitee From 78ddf5c1bb3d7326f79528a204044fe67d9c679c Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 10:45:35 +0800 Subject: [PATCH 08/16] Prohibit multi process rekey Signed-off-by: bjd --- ...rohibited-in-multi-process-scenarios.patch | 63 ++++++++++++++++--- patch/0008-BugFix-CurrVersion.patch | 31 +++++---- 2 files changed, 69 insertions(+), 25 deletions(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 3a8bf72..0112192 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,21 +1,22 @@ -From 9cd0695f173277474907a676b655eab05c886fcb Mon Sep 17 00:00:00 2001 +From 9bd46cab09112828f92e3b5f2db0e6fa97835ecb Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 09:26:57 +0800 +Date: Sun, 27 Apr 2025 10:42:52 +0800 Subject: [PATCH] Rekey is prohibited in multi-process scenarios Signed-off-by: bjd --- - src/sqlite3.c | 33 ++++++++++++++++++++++++++++++++- - 1 file changed, 32 insertions(+), 1 deletion(-) + src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..e7ba851 100644 +index 7e9dcbf..24a5e38 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c -@@ -259833,6 +259833,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ +@@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ + } sqlite3_mutex_leave(db->mutex); - +- + rc = sqlite3BtreeBeginTrans(p, 0, 0); + if( rc!=SQLITE_OK ){ + sqlite3_log(SQLITE_WARNING, "sqlite3CodecAttach: error when begin trans. errno = %d", rc); @@ -25,7 +26,29 @@ index 7e9dcbf..e7ba851 100644 return SQLITE_OK; } -@@ -259898,7 +259904,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259874,6 +259879,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ + return sqlite3_rekey_v2(db, "main", pKey, nKey); + } + ++static inline u8 IsConnectionValidForCheck(Pager *pPager) ++{ ++#if SQLITE_OS_UNIX ++ unixFile *fd = (unixFile *)pPager->fd; ++ // unix and only one connection exist ++ if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || ++ sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { ++ return 0; ++ } ++ return 1; ++#else ++ return 0; ++#endif ++} ++ + int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ + if(db == NULL || pKey == NULL || nKey == 0){ + return SQLITE_ERROR; +@@ -259898,7 +259918,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -54,7 +77,7 @@ index 7e9dcbf..e7ba851 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -259922,6 +259948,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259962,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } @@ -66,6 +89,28 @@ index 7e9dcbf..e7ba851 100644 if(rc == SQLITE_OK){ (void)sqlite3BtreeCommit(p); sqlite3CodecFreeKeyContext(ctx->readCtx); +@@ -261257,21 +261302,6 @@ CHK_RESTORE_OUT: + return rc; + } + +-static inline u8 IsConnectionValidForCheck(Pager *pPager) +-{ +-#if SQLITE_OS_UNIX +- unixFile *fd = (unixFile *)pPager->fd; +- // unix and only one connection exist +- if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || +- sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { +- return 0; +- } +- return 1; +-#else +- return 0; +-#endif +-} +- + static int MetaDwrOpenAndCheck(Btree *pBt) + { + Pager *pPager = pBt->pBt->pPager; -- 2.46.2.windows.1 diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index 7c57ad3..d36bed9 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,15 +1,15 @@ -From 954714d6229b8f4541781af002ffe702c6f925cd Mon Sep 17 00:00:00 2001 +From 5fcaf19014b063b5d527c5ed0bc076e15fab6ba1 Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 10:17:12 +0800 -Subject: [PATCH] 08 +Date: Sun, 27 Apr 2025 11:34:25 +0800 +Subject: [PATCH] BugFix CurrVersion Signed-off-by: bjd --- - src/sqlite3.c | 121 ++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 97 insertions(+), 24 deletions(-) + src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 96 insertions(+), 24 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index e7ba851..33bc3ca 100644 +index 24a5e38..61cc6e7 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -83,7 +83,7 @@ index e7ba851..33bc3ca 100644 /* ** Implementation of offsets() function. */ -@@ -205787,6 +205826,13 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( +@@ -205787,6 +205826,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( sCtx.iDocid = pCsr->iPrevId; sCtx.pCsr = pCsr; @@ -92,12 +92,11 @@ index e7ba851..33bc3ca 100644 + ** have been saved. */ + rc = sqlite3Fts3ExprIterate(pCsr->pExpr, fts3ExprRestartIfCb, (void*)&sCtx); + if( rc!=SQLITE_OK ) goto offsets_out; -+ + /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260421,7 +260467,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260435,7 +260480,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -106,7 +105,7 @@ index e7ba851..33bc3ca 100644 parse->nErr++; parse->rc = rc; } -@@ -260873,6 +260919,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260887,6 +260932,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -136,7 +135,7 @@ index e7ba851..33bc3ca 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260889,15 +260958,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260903,15 +260971,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -153,7 +152,7 @@ index e7ba851..33bc3ca 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261456,16 +261520,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -170,7 +169,7 @@ index e7ba851..33bc3ca 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261482,7 +261536,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -179,7 +178,7 @@ index e7ba851..33bc3ca 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261521,8 +261575,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -190,7 +189,7 @@ index e7ba851..33bc3ca 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261542,10 +261596,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -206,7 +205,7 @@ index e7ba851..33bc3ca 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261614,6 +261671,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ -- Gitee From b74d3d1e14843b5cb20a1990d4c7dd7fda40bf70 Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 11:23:54 +0800 Subject: [PATCH 09/16] Prohibit multi process rekey Signed-off-by: bjd --- ...rohibited-in-multi-process-scenarios.patch | 63 +++---------------- patch/0008-BugFix-CurrVersion.patch | 30 ++++----- 2 files changed, 24 insertions(+), 69 deletions(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 0112192..3a8bf72 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,22 +1,21 @@ -From 9bd46cab09112828f92e3b5f2db0e6fa97835ecb Mon Sep 17 00:00:00 2001 +From 9cd0695f173277474907a676b655eab05c886fcb Mon Sep 17 00:00:00 2001 From: bjd -Date: Sun, 27 Apr 2025 10:42:52 +0800 +Date: Mon, 28 Apr 2025 09:26:57 +0800 Subject: [PATCH] Rekey is prohibited in multi-process scenarios Signed-off-by: bjd --- - src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- - 1 file changed, 47 insertions(+), 17 deletions(-) + src/sqlite3.c | 33 ++++++++++++++++++++++++++++++++- + 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..24a5e38 100644 +index 7e9dcbf..e7ba851 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c -@@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ - } +@@ -259833,6 +259833,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ sqlite3_mutex_leave(db->mutex); -- + + rc = sqlite3BtreeBeginTrans(p, 0, 0); + if( rc!=SQLITE_OK ){ + sqlite3_log(SQLITE_WARNING, "sqlite3CodecAttach: error when begin trans. errno = %d", rc); @@ -26,29 +25,7 @@ index 7e9dcbf..24a5e38 100644 return SQLITE_OK; } -@@ -259874,6 +259879,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ - return sqlite3_rekey_v2(db, "main", pKey, nKey); - } - -+static inline u8 IsConnectionValidForCheck(Pager *pPager) -+{ -+#if SQLITE_OS_UNIX -+ unixFile *fd = (unixFile *)pPager->fd; -+ // unix and only one connection exist -+ if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || -+ sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { -+ return 0; -+ } -+ return 1; -+#else -+ return 0; -+#endif -+} -+ - int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ - if(db == NULL || pKey == NULL || nKey == 0){ - return SQLITE_ERROR; -@@ -259898,7 +259918,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259898,7 +259904,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -77,7 +54,7 @@ index 7e9dcbf..24a5e38 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -259922,6 +259962,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259948,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } @@ -89,28 +66,6 @@ index 7e9dcbf..24a5e38 100644 if(rc == SQLITE_OK){ (void)sqlite3BtreeCommit(p); sqlite3CodecFreeKeyContext(ctx->readCtx); -@@ -261257,21 +261302,6 @@ CHK_RESTORE_OUT: - return rc; - } - --static inline u8 IsConnectionValidForCheck(Pager *pPager) --{ --#if SQLITE_OS_UNIX -- unixFile *fd = (unixFile *)pPager->fd; -- // unix and only one connection exist -- if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || -- sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { -- return 0; -- } -- return 1; --#else -- return 0; --#endif --} -- - static int MetaDwrOpenAndCheck(Btree *pBt) - { - Pager *pPager = pBt->pBt->pPager; -- 2.46.2.windows.1 diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index d36bed9..fb32863 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,15 +1,15 @@ -From 5fcaf19014b063b5d527c5ed0bc076e15fab6ba1 Mon Sep 17 00:00:00 2001 +From 954714d6229b8f4541781af002ffe702c6f925cd Mon Sep 17 00:00:00 2001 From: bjd -Date: Sun, 27 Apr 2025 11:34:25 +0800 -Subject: [PATCH] BugFix CurrVersion +Date: Mon, 28 Apr 2025 10:17:12 +0800 +Subject: [PATCH] 08 Signed-off-by: bjd --- - src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 96 insertions(+), 24 deletions(-) + src/sqlite3.c | 121 ++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 97 insertions(+), 24 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 24a5e38..61cc6e7 100644 +index e7ba851..33bc3ca 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -83,7 +83,7 @@ index 24a5e38..61cc6e7 100644 /* ** Implementation of offsets() function. */ -@@ -205787,6 +205826,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( +@@ -205787,6 +205826,13 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( sCtx.iDocid = pCsr->iPrevId; sCtx.pCsr = pCsr; @@ -96,7 +96,7 @@ index 24a5e38..61cc6e7 100644 /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260435,7 +260480,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260421,7 +260467,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -105,7 +105,7 @@ index 24a5e38..61cc6e7 100644 parse->nErr++; parse->rc = rc; } -@@ -260887,6 +260932,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260873,6 +260919,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -135,7 +135,7 @@ index 24a5e38..61cc6e7 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260903,15 +260971,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260889,15 +260958,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -152,7 +152,7 @@ index 24a5e38..61cc6e7 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261456,16 +261520,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -169,7 +169,7 @@ index 24a5e38..61cc6e7 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261482,7 +261536,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -178,7 +178,7 @@ index 24a5e38..61cc6e7 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261521,8 +261575,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -189,7 +189,7 @@ index 24a5e38..61cc6e7 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261542,10 +261596,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -205,7 +205,7 @@ index 24a5e38..61cc6e7 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261614,6 +261671,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ -- Gitee From 7ffb9c86bb132c134891f7bd3bc1657215a65ddb Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 11:27:55 +0800 Subject: [PATCH 10/16] Prohibit multi process rekey Signed-off-by: bjd --- patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 3a8bf72..2523260 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -39,7 +39,7 @@ index 7e9dcbf..e7ba851 100644 +#ifndef SQLITE_OMIT_WAL + if(pPager->pWal != NULL){ + rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); -+ if(rc != SQLITE_OK || !IsConnectionValidForCheck(pPager)){ ++ if(rc != SQLITE_OK){ + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when lock. errno = %d.", rc); + if(rc == SQLITE_OK){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); -- Gitee From 637d901471bc28bacd0dadaa53e6514ae3d7b683 Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 14:19:00 +0800 Subject: [PATCH 11/16] Prohibit multi process rekey Signed-off-by: bjd --- ...rohibited-in-multi-process-scenarios.patch | 21 +++++++------- patch/0008-BugFix-CurrVersion.patch | 28 +++++++++---------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 2523260..7657930 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,21 +1,22 @@ -From 9cd0695f173277474907a676b655eab05c886fcb Mon Sep 17 00:00:00 2001 +From 9d966457e7926d0cfdb80f2b5470d617441ecd70 Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 09:26:57 +0800 +Date: Mon, 28 Apr 2025 14:00:57 +0800 Subject: [PATCH] Rekey is prohibited in multi-process scenarios Signed-off-by: bjd --- - src/sqlite3.c | 33 ++++++++++++++++++++++++++++++++- - 1 file changed, 32 insertions(+), 1 deletion(-) + src/sqlite3.c | 34 ++++++++++++++++++++++++++++++++-- + 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..e7ba851 100644 +index 7e9dcbf..d2200c3 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c -@@ -259833,6 +259833,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ +@@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ + } sqlite3_mutex_leave(db->mutex); - +- + rc = sqlite3BtreeBeginTrans(p, 0, 0); + if( rc!=SQLITE_OK ){ + sqlite3_log(SQLITE_WARNING, "sqlite3CodecAttach: error when begin trans. errno = %d", rc); @@ -25,7 +26,7 @@ index 7e9dcbf..e7ba851 100644 return SQLITE_OK; } -@@ -259898,7 +259904,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259898,7 +259903,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -39,7 +40,7 @@ index 7e9dcbf..e7ba851 100644 +#ifndef SQLITE_OMIT_WAL + if(pPager->pWal != NULL){ + rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); -+ if(rc != SQLITE_OK){ ++ if(rc != SQLITE_OK || !IsConnectionValidForCheck(pPager)){ + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when lock. errno = %d.", rc); + if(rc == SQLITE_OK){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); @@ -54,7 +55,7 @@ index 7e9dcbf..e7ba851 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -259922,6 +259948,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259947,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index fb32863..4398af0 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,15 +1,15 @@ -From 954714d6229b8f4541781af002ffe702c6f925cd Mon Sep 17 00:00:00 2001 +From f924a8d41223874a04823ddeeb6b7d42b3c7be33 Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 10:17:12 +0800 +Date: Mon, 28 Apr 2025 14:16:16 +0800 Subject: [PATCH] 08 Signed-off-by: bjd --- - src/sqlite3.c | 121 ++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 97 insertions(+), 24 deletions(-) + src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 96 insertions(+), 24 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index e7ba851..33bc3ca 100644 +index d2200c3..ee19f5d 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -83,7 +83,7 @@ index e7ba851..33bc3ca 100644 /* ** Implementation of offsets() function. */ -@@ -205787,6 +205826,13 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( +@@ -205787,6 +205826,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( sCtx.iDocid = pCsr->iPrevId; sCtx.pCsr = pCsr; @@ -96,7 +96,7 @@ index e7ba851..33bc3ca 100644 /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260421,7 +260467,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260420,7 +260465,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -105,7 +105,7 @@ index e7ba851..33bc3ca 100644 parse->nErr++; parse->rc = rc; } -@@ -260873,6 +260919,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260872,6 +260917,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -135,7 +135,7 @@ index e7ba851..33bc3ca 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260889,15 +260958,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260888,15 +260956,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -152,7 +152,7 @@ index e7ba851..33bc3ca 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261456,16 +261520,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -169,7 +169,7 @@ index e7ba851..33bc3ca 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261482,7 +261536,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -178,7 +178,7 @@ index e7ba851..33bc3ca 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261521,8 +261575,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -189,7 +189,7 @@ index e7ba851..33bc3ca 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261542,10 +261596,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -205,7 +205,7 @@ index e7ba851..33bc3ca 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261614,6 +261671,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ -- Gitee From 0bb7f6048f28267ed10378222bdf62fff89656bd Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 14:33:08 +0800 Subject: [PATCH 12/16] Prohibit multi process rekey Signed-off-by: bjd --- patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 7657930..6dba0da 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -40,7 +40,7 @@ index 7e9dcbf..d2200c3 100644 +#ifndef SQLITE_OMIT_WAL + if(pPager->pWal != NULL){ + rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); -+ if(rc != SQLITE_OK || !IsConnectionValidForCheck(pPager)){ ++ if(rc != SQLITE_OK){ + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when lock. errno = %d.", rc); + if(rc == SQLITE_OK){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); -- Gitee From e0f094c1fd477b91f131f5dea085760c14ffc8b6 Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 15:57:24 +0800 Subject: [PATCH 13/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 2 ++ patch/0001-BaselineWithHistoryOH.patch | 4 ++-- .../0007-Rekey-is-prohibited-in-multi-process-scenarios.patch | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 3b03c37..287a8d7 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -231,6 +231,8 @@ if (is_mingw || is_mac) { "SQLITE_EXPORT_SYMBOLS", "SQLITE_SHARED_BLOCK_OPTIMIZATION", "OPENSSL_SUPPRESS_DEPRECATED", + "SQLITE_ENABLE_LOAD_EXTENSION", + "SQLITE_ENABLE_DROPTABLE_CALLBACK", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ diff --git a/patch/0001-BaselineWithHistoryOH.patch b/patch/0001-BaselineWithHistoryOH.patch index ef9b8cf..de3b07b 100644 --- a/patch/0001-BaselineWithHistoryOH.patch +++ b/patch/0001-BaselineWithHistoryOH.patch @@ -2217,9 +2217,9 @@ index 946815f..d2bfc23 100644 + +/************** End file hw_codec_openssl.c *********************************/ +/************** Begin file hw_codec.c ***************************************/ -+ ++#if !defined(__MINGW64__) && !defined(__MINGW32__) +#include "securec.h" -+ ++#endif +typedef enum{ + OPERATE_CONTEXT_READ = 0, + OPERATE_CONTEXT_WRITE, diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 6dba0da..81d644e 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -37,7 +37,7 @@ index 7e9dcbf..d2200c3 100644 + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when begin trans. errno = %d.", rc); + return rc; + } -+#ifndef SQLITE_OMIT_WAL ++#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_OS_UNIX) + if(pPager->pWal != NULL){ + rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); + if(rc != SQLITE_OK){ @@ -59,7 +59,7 @@ index 7e9dcbf..d2200c3 100644 } } } -+#ifndef SQLITE_OMIT_WAL ++#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_OS_UNIX) + if(pPager->pWal != NULL){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); + } -- Gitee From 048d3aae37aa9913615daceb5a9c99c5f150f948 Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 16:19:50 +0800 Subject: [PATCH 14/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 1 + patch/0001-BaselineWithHistoryOH.patch | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 287a8d7..fed5865 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -233,6 +233,7 @@ if (is_mingw || is_mac) { "OPENSSL_SUPPRESS_DEPRECATED", "SQLITE_ENABLE_LOAD_EXTENSION", "SQLITE_ENABLE_DROPTABLE_CALLBACK", + "SECUREC_API", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ diff --git a/patch/0001-BaselineWithHistoryOH.patch b/patch/0001-BaselineWithHistoryOH.patch index de3b07b..ef9b8cf 100644 --- a/patch/0001-BaselineWithHistoryOH.patch +++ b/patch/0001-BaselineWithHistoryOH.patch @@ -2217,9 +2217,9 @@ index 946815f..d2bfc23 100644 + +/************** End file hw_codec_openssl.c *********************************/ +/************** Begin file hw_codec.c ***************************************/ -+#if !defined(__MINGW64__) && !defined(__MINGW32__) ++ +#include "securec.h" -+#endif ++ +typedef enum{ + OPERATE_CONTEXT_READ = 0, + OPERATE_CONTEXT_WRITE, -- Gitee From 388341144bf52577df088a56def7c92c65747180 Mon Sep 17 00:00:00 2001 From: bjd Date: Mon, 28 Apr 2025 17:30:12 +0800 Subject: [PATCH 15/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 1 - 1 file changed, 1 deletion(-) diff --git a/BUILD.gn b/BUILD.gn index fed5865..287a8d7 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -233,7 +233,6 @@ if (is_mingw || is_mac) { "OPENSSL_SUPPRESS_DEPRECATED", "SQLITE_ENABLE_LOAD_EXTENSION", "SQLITE_ENABLE_DROPTABLE_CALLBACK", - "SECUREC_API", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ -- Gitee From 0cbc0d0c6ee10cbe2242836e373b2564b305b89b Mon Sep 17 00:00:00 2001 From: bjd Date: Tue, 29 Apr 2025 10:57:46 +0800 Subject: [PATCH 16/16] Prohibit multi process rekey Signed-off-by: bjd --- BUILD.gn | 3 +- ...rohibited-in-multi-process-scenarios.patch | 64 ++++++++++++++++--- patch/0008-BugFix-CurrVersion.patch | 39 ++++++----- 3 files changed, 79 insertions(+), 27 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 287a8d7..d796c22 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -231,8 +231,6 @@ if (is_mingw || is_mac) { "SQLITE_EXPORT_SYMBOLS", "SQLITE_SHARED_BLOCK_OPTIMIZATION", "OPENSSL_SUPPRESS_DEPRECATED", - "SQLITE_ENABLE_LOAD_EXTENSION", - "SQLITE_ENABLE_DROPTABLE_CALLBACK", ] remove_configs = [ "//build/config/compiler:chromium_code" ] deps = [ @@ -246,6 +244,7 @@ if (is_mingw || is_mac) { cflags = [ "-Wno-error=implicit-function-declaration", "-Wno-implicit-fallthrough", + "-Wno-inconsistent-dllimport", ] part_name = "sqlite" subsystem_name = "thirdparty" diff --git a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch index 81d644e..832ddf5 100644 --- a/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch +++ b/patch/0007-Rekey-is-prohibited-in-multi-process-scenarios.patch @@ -1,15 +1,15 @@ -From 9d966457e7926d0cfdb80f2b5470d617441ecd70 Mon Sep 17 00:00:00 2001 +From dcd58e24c29a5a4bbda63291ea82a39724c334bb Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 14:00:57 +0800 +Date: Tue, 29 Apr 2025 10:39:11 +0800 Subject: [PATCH] Rekey is prohibited in multi-process scenarios Signed-off-by: bjd --- - src/sqlite3.c | 34 ++++++++++++++++++++++++++++++++-- - 1 file changed, 32 insertions(+), 2 deletions(-) + src/sqlite3.c | 64 +++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index 7e9dcbf..d2200c3 100644 +index 7e9dcbf..183d75b 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -259832,7 +259832,12 @@ int sqlite3CodecAttach(sqlite3* db, int nDb, const void *pKey, int nKey){ @@ -26,7 +26,29 @@ index 7e9dcbf..d2200c3 100644 return SQLITE_OK; } -@@ -259898,7 +259903,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259874,6 +259879,21 @@ int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey){ + return sqlite3_rekey_v2(db, "main", pKey, nKey); + } + ++static inline u8 IsConnectionValidForCheck(Pager *pPager) ++{ ++#if SQLITE_OS_UNIX ++ unixFile *fd = (unixFile *)pPager->fd; ++ // unix and only one connection exist ++ if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || ++ sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { ++ return 0; ++ } ++ return 1; ++#else ++ return 0; ++#endif ++} ++ + int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ + if(db == NULL || pKey == NULL || nKey == 0){ + return SQLITE_ERROR; +@@ -259898,7 +259918,27 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ return rc; } sqlite3_mutex_enter(db->mutex); @@ -37,10 +59,10 @@ index 7e9dcbf..d2200c3 100644 + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when begin trans. errno = %d.", rc); + return rc; + } -+#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_OS_UNIX) ++#if SQLITE_OS_UNIX && !defined(SQLITE_OMIT_WAL) + if(pPager->pWal != NULL){ + rc = unixShmSystemLock((unixFile *)pPager->fd, F_WRLCK, UNIX_SHM_DMS, 1); -+ if(rc != SQLITE_OK){ ++ if(rc != SQLITE_OK || !IsConnectionValidForCheck(pPager)){ + sqlite3_log(SQLITE_WARNING, "sqlite3_rekey_v2: error when lock. errno = %d.", rc); + if(rc == SQLITE_OK){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); @@ -55,11 +77,11 @@ index 7e9dcbf..d2200c3 100644 sqlite3PagerPagecount(pPager, &pageCount); // support hmac algo changed by using rekey operation int oldHmacAlgo = ctx->writeCtx->codecConst.hmacAlgo; -@@ -259922,6 +259947,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ +@@ -259922,6 +259962,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int nKey){ } } } -+#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_OS_UNIX) ++#if SQLITE_OS_UNIX && !defined(SQLITE_OMIT_WAL) + if(pPager->pWal != NULL){ + unixShmSystemLock((unixFile *)pPager->fd, F_RDLCK, UNIX_SHM_DMS, 1); + } @@ -67,6 +89,28 @@ index 7e9dcbf..d2200c3 100644 if(rc == SQLITE_OK){ (void)sqlite3BtreeCommit(p); sqlite3CodecFreeKeyContext(ctx->readCtx); +@@ -261257,21 +261302,6 @@ CHK_RESTORE_OUT: + return rc; + } + +-static inline u8 IsConnectionValidForCheck(Pager *pPager) +-{ +-#if SQLITE_OS_UNIX +- unixFile *fd = (unixFile *)pPager->fd; +- // unix and only one connection exist +- if (fd == NULL || fd->pInode == NULL || pPager->pVfs == NULL || +- sqlite3_stricmp(pPager->pVfs->zName, "unix") != 0 || fd->pInode->nRef != 1) { +- return 0; +- } +- return 1; +-#else +- return 0; +-#endif +-} +- + static int MetaDwrOpenAndCheck(Btree *pBt) + { + Pager *pPager = pBt->pBt->pPager; -- 2.46.2.windows.1 diff --git a/patch/0008-BugFix-CurrVersion.patch b/patch/0008-BugFix-CurrVersion.patch index 4398af0..3182888 100644 --- a/patch/0008-BugFix-CurrVersion.patch +++ b/patch/0008-BugFix-CurrVersion.patch @@ -1,15 +1,15 @@ -From f924a8d41223874a04823ddeeb6b7d42b3c7be33 Mon Sep 17 00:00:00 2001 +From d67dfe05906da2b4f4699e1a46c99adef762fa91 Mon Sep 17 00:00:00 2001 From: bjd -Date: Mon, 28 Apr 2025 14:16:16 +0800 +Date: Tue, 29 Apr 2025 10:55:16 +0800 Subject: [PATCH] 08 Signed-off-by: bjd --- - src/sqlite3.c | 120 ++++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 96 insertions(+), 24 deletions(-) + src/sqlite3.c | 122 +++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 96 insertions(+), 26 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c -index d2200c3..ee19f5d 100644 +index 183d75b..ad17f02 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -45151,7 +45151,7 @@ static int unixOpen( @@ -43,7 +43,16 @@ index d2200c3..ee19f5d 100644 } /* If no error occurred, set the output variables. */ -@@ -205751,6 +205757,39 @@ static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){ +@@ -139303,8 +139309,6 @@ static const sqlite3_api_routines sqlite3Apis = { + sqlite3_set_clientdata, + #ifdef SQLITE_ENABLE_DROPTABLE_CALLBACK + sqlite3_set_droptable_handle +-#else +- 0 + #endif /* SQLITE_ENABLE_DROPTABLE_CALLBACK */ + }; + +@@ -205751,6 +205755,39 @@ static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){ return rc; } @@ -83,7 +92,7 @@ index d2200c3..ee19f5d 100644 /* ** Implementation of offsets() function. */ -@@ -205787,6 +205826,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( +@@ -205787,6 +205824,12 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( sCtx.iDocid = pCsr->iPrevId; sCtx.pCsr = pCsr; @@ -96,7 +105,7 @@ index d2200c3..ee19f5d 100644 /* Loop through the table columns, appending offset information to ** string-buffer res for each column. */ -@@ -260420,7 +260465,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * +@@ -260435,7 +260478,7 @@ static int PragmaMetaDoubleWrie(sqlite3 *db, int iDb, Parse *parse, const char * sqlite3_mutex_enter(db->mutex); // only support enabled meta double write int rc = MetaDwrOpenAndCheck(pBt); @@ -105,7 +114,7 @@ index d2200c3..ee19f5d 100644 parse->nErr++; parse->rc = rc; } -@@ -260872,6 +260917,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) +@@ -260887,6 +260930,29 @@ static inline const char *GetMetaFilePath(Pager *pPager) return pPager->metaFd == NULL ? NULL : ((const char *)pPager->metaFd + ROUND8(pPager->pVfs->szOsFile)); } @@ -135,7 +144,7 @@ index d2200c3..ee19f5d 100644 static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { if (pPager->metaFd || pPager->zFilename == NULL) { return SQLITE_OK; -@@ -260888,15 +260956,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { +@@ -260903,15 +260969,10 @@ static int MetaDwrOpenFile(Pager *pPager, u8 openCreate) { return SQLITE_NOMEM_BKPT; } sqlite3_snprintf(size, metaPath, "%s-dwr", pPager->zFilename); @@ -152,7 +161,7 @@ index d2200c3..ee19f5d 100644 u32 flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL); if (openCreate) { flags |= SQLITE_OPEN_CREATE; -@@ -261455,16 +261518,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT +@@ -261455,16 +261516,6 @@ static inline void MarkLockStatusByRc(int rc, u32 lockIdx, u32 lockLen, u8 lockT } } @@ -169,7 +178,7 @@ index d2200c3..ee19f5d 100644 static inline const char *IdxToLockName(u32 idx) { const char *lockName[MAX_LOCK_NUM] = {"write", "ckpt", "recover", "read0", -@@ -261481,7 +261534,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) +@@ -261481,7 +261532,7 @@ static void DumpHandleLock(char *dumpBuf, int dumpBufLen) for (int i = 0; i < MAX_LOCK_NUM && availLen > DUMP_MAX_STR_LEN; i++) { if (lockStatus[i] != NO_LOCK) { tmp[0] = '\0'; @@ -178,7 +187,7 @@ index d2200c3..ee19f5d 100644 int len = strlen(tmp); tmp += len; availLen -= len; -@@ -261520,8 +261573,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261520,8 +261571,8 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) sqlite3_log(SQLITE_ERROR, "[SQLite]Inode is null!"); return; } @@ -189,7 +198,7 @@ index d2200c3..ee19f5d 100644 const char *lockName[DB_LOCK_NUM] = {"pending", "reserved", "shared_first"}; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261541,10 +261594,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) +@@ -261541,10 +261592,13 @@ static void DumpTrxProcessLocks(unixFile *file, char *dumpBuf, int dumpBufLen) static void DumpWalLocks(unixFile *file, u8 walEnabled, char *dumpBuf, int dumpBufLen) { @@ -205,7 +214,7 @@ index d2200c3..ee19f5d 100644 unixShmNode *pShmNode = file->pShm->pShmNode; char *tmp = dumpBuf; int availLen = dumpBufLen - 1; -@@ -261613,6 +261669,22 @@ static void DumpLocksByPager(Pager *pPager) +@@ -261613,6 +261667,22 @@ static void DumpLocksByPager(Pager *pPager) } #endif /* SQLITE_OS_UNIX */ -- Gitee