diff --git a/src/sqlite3.c b/src/sqlite3.c index 7b9518417e0ed4ac1d151b511250fb77e3866a5c..add0f4d70ebd4cb73c2444c24b084eb1f736bcfd 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; }