Commit f5b8d017 authored by Howard Chu's avatar Howard Chu
Browse files

fix Windows mdb_env_copy(), WriteFile overflow

parent 66f2b7b2
......@@ -3431,10 +3431,17 @@ mdb_env_copy(MDB_env *env, const char *path)
ptr = env->me_map + wsize;
wsize = txn->mt_next_pgno * env->me_psize - wsize;
#ifdef _WIN32
{
DWORD len;
rc = WriteFile(newfd, ptr, wsize, &len, NULL);
rc = (len == wsize) ? MDB_SUCCESS : ErrCode();
#define MAX_UINT32 4294967295U
while (wsize > 0) {
DWORD len, w2;
if (wsize > MAX_UINT32)
w2 = MAX_UINT32 - env->me_psize + 1; /* write in pagesize chunks */
else
w2 = wsize;
rc = WriteFile(newfd, ptr, w2, &len, NULL);
rc = (len == w2) ? MDB_SUCCESS : ErrCode();
if (rc) break;
wsize -= w2;
}
#else
rc = write(newfd, ptr, wsize);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment