From 8a1ea6045048976f97974f1641afcb1470c8916c Mon Sep 17 00:00:00 2001 From: ryne3366 Date: Mon, 10 Feb 2025 18:36:14 +0800 Subject: [PATCH] meta recovery fix page buffer override access Signed-off-by: ryne3366 --- src/sqlite3.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sqlite3.c b/src/sqlite3.c index 7b95184..add0f4d 100644 --- a/src/sqlite3.c +++ b/src/sqlite3.c @@ -246291,7 +246291,7 @@ static void MetaDwrReleaseHdr(MetaDwrHdr *hdr) { sqlite3_free(hdr); } -static int ExpandMetaPageBuf(MetaDwrHdr *hdr, u32 minimalPageCnt) { +static int ExpandMetaPageBuf(MetaDwrHdr *hdr, u32 minimalPageCnt, u32 bufHasData) { if (minimalPageCnt < hdr->pageBufSize && hdr->zones != NULL) { return SQLITE_OK; } @@ -246302,7 +246302,7 @@ static int ExpandMetaPageBuf(MetaDwrHdr *hdr, u32 minimalPageCnt) { } Pgno *pgnos = (Pgno *)(zones + pageBufSz); if (hdr->zones != NULL) { - if (hdr->pageCnt > 0) { + if (bufHasData && hdr->pageCnt > 0) { (void)memcpy(zones, hdr->zones, hdr->pageCnt * sizeof(u8)); (void)memcpy(pgnos, hdr->pages, hdr->pageCnt * sizeof(Pgno)); } @@ -246320,7 +246320,7 @@ static MetaDwrHdr *AllocInitMetaHeaderDwr(Pager *pPager) { return NULL; } InitMetaHeader(hdr); - int rc = ExpandMetaPageBuf(hdr, META_DWR_HEADER_DEFAULT_PAGE_CNT); + int rc = ExpandMetaPageBuf(hdr, META_DWR_HEADER_DEFAULT_PAGE_CNT, 0); if (rc != SQLITE_OK) { MetaDwrReleaseHdr(hdr); return NULL; @@ -246381,7 +246381,7 @@ static int MetaDwrReadHeader(Pager *pPager, MetaDwrHdr *hdr) { goto READ_META_OUT; } // avoid realloc buffer if buf can't hold all pages - rc = ExpandMetaPageBuf(hdr, hdr->pageCnt); + rc = ExpandMetaPageBuf(hdr, hdr->pageCnt, 0); if (rc != SQLITE_OK) { goto READ_META_OUT; } @@ -246520,7 +246520,7 @@ static int MetaDwrWriteOnePage(Btree *pBt, PgHdr *pPage, MetaDwrHdr *hdr, u8 cur int rc = SQLITE_OK; u8 pageExpand = 0; if (hdr->pageCnt <= idx) { - rc = ExpandMetaPageBuf(hdr, idx + 1); + rc = ExpandMetaPageBuf(hdr, idx + 1, 1); if (rc != SQLITE_OK) { return rc; } -- Gitee